Fragen zu ADC am AVR und Potentiometer!

  • Hallo Alle zusammen.


    Heute möchte ich gerne einen Schritt weiter gehen, bzw. damit anfangen und eine Spannung mittels des ADC am AVR auswerten und auf ein PWM Signal umzusetzen!


    Wissen wird für folgendes Gesucht:


    Ein Potentiometer, als Spannungsteiler am ADC des AVR`s anschließen und mit einer Internen Referenzspannung von 5V vergleichen!



    Es werfen sich jetzt Grundlegende Fragen auf!


    • Wie stelle ich die INTERNE(?) Referenzspannung auf 5 V ein? Fusebits?
    • Funktioniert das vergleichen einer Spannung und Umsetzung auf Soft PWM überhaupt? Geht dann nur Hardware PWM?
    • Muss ich Zwingend bei ADC0 Anfangen oder geht auch ADC4? (Atmega32!!)
    • Wie erstelle ich den Bascom /Basic Code für den ADC und wie binde ich das in die PWM ein?
    • Zum Testen kann ich dort das Pollin Board nehmen oder muss ein andere Testplatine aufgebaut werden?
    • Muss die PWM Frequenz für Lüfter zB. anders sein als für LEDs?

    Ich denke das sind erstmal genug Fragen!


    Als Referenzquelle dient mir das Tuturial:
    http://halvar.at/elektronik/kl…_avr_kurs/adc_mit_getadc/



    Eigentlich suche ich speziell das einbinden in die PWM und wie man das ADC Initialisiert und einstellt!!!
    Bitte Nachsicht, denn ich bin Anfänger^^


    Angedacht ist an den Atmega32 an den PINs folgendes:
    PA0 = Potentiometer als Spannungsteiler. (Poti 1 an VCC 2 an AVR 3 an GND)
    PC6/7 2x LEDs mit Vorwiederstand



    Code Grundgerüst:


    Für jede Hilfe wäre ich dankbar!!
    Grüße euer Prying

  • Wie stelle ich die INTERNE(?) Referenzspannung auf 5 V ein? Fusebits?
    Funktioniert das vergleichen einer Spannung und Umsetzung auf Soft PWM überhaupt? Geht dann nur Hardware PWM?
    Muss ich Zwingend bei ADC0 Anfangen oder geht auch ADC4? (Atmega32!!)
    Wie erstelle ich den Bascom /Basic Code für den ADC und wie binde ich das in die PWM ein?
    Zum Testen kann ich dort das Pollin Board nehmen oder muss ein andere Testplatine aufgebaut werden?
    Muss die PWM Frequenz für Lüfter zB. anders sein als für LEDs?


    -das wird im Register ADMUX gesetzt
    -ja, nein
    -geht mit jedem ADC
    -Hilfe aufmachen und den Beispielcode von ADC und PWM passend zusammenbasteln
    -habe zwar kein Pollinboard aber warum soll das nicht gehen?
    -kommt wohl darauf an was dein Lüfter will, steht wahrscheinlich im Datenblatt

  • -kommt wohl darauf an was dein Lüfter will, steht wahrscheinlich im Datenblatt

    Ist nur ein Lüfter mit Masse und Plus, dachte ich steuer den mithilfe einef Mosfet dann an auf Masse!

    -habe zwar kein Pollinboard aber warum soll das nicht gehen?

    Wegen der genialen PIN Belegung, da die wichtigsten PINS zB. die OCRA und Co. unmöglich beschaltet sind!
    Was sucht ein Taster zB. an nem Timerausgang?!



    Aber danke für die Antworten Snowfly, werde mich mal durchschauen!


    Gruß


    Prying

  • Ist nur ein Lüfter mit Masse und Plus, dachte ich steuer den mithilfe einef Mosfet dann an auf Masse!


    Nimm lieber einen mit PWM Eingang, sonst brauchst du einen Tiefpass davor.


    Wegen der genialen PIN Belegung,


    Dazu hat das Board ja die Jumper(die kann man auch abziehen und mit einer Brücke nach Wunsch verschalten) Den Poti musst du ja auch noch anbasteln.
    Der 40pol. Stecker is ja auch noch da.

  • OWNED!


    Die Jumper... :whistling:


    OK, ich habe jetzt die BASCOM Hilfe genutzt und aus dem TUT, die Befehle genommen.


    Nachvollziehen was die machen kann ich, nur ob ich das jetzt in der Hauptschleife richtig umgesetzt habe, ist so ne Sache!!!!


    Eine LED soll wenn das Messergebnis gleich oder höher als "7" ist, einmal Runter und danach wider Hoch Faden.


    Code:



    Ich habe Hardwaremäßig noch nichts aufgebaut, deswegen während Ihr hier in den nächsten Minuten lesen werdet, werde ich inzwischen das Pollin Board umbauen, dank den JUMPERN ist das ja möglich!! ;)


    Gruß


    Prying

  • Das Programm sieht irgendwie nicht so aus als ob es das macht was du willst...
    aber die passenden Befehle hast du, musst nur noch die passende reihenfolge und anzahl rausfinden ;)


    Zitat

    Const Adc_multi = 0.0048828125
    Volt = Messergebnis * Adc_multi


    AUTSCH

  • Habe es aufgebaut, und mal den Code vereinfacht!


    Denn so wirklich ar ich von meiner Hauptschleife auch nicht überzeugt!


    Jetzt habe ich mal PWM raus geholt und möchte nur, das wenn ein Ergebnis anliegt, die LED am entsprechenden PIN aufleuchtet!


    Variablen habe ich net großartig geändert, deswegen vom Begriff "PWM" nicht verwirren lassen.


    Hier mal der Code, aber es geht natürlich nicht!



    Snowfly, ich kann dein Autsch doch nicht so wirklich nachvollziehen!
    Aber das war bestimmt auf die Rechenaufgabe bezogen!
    Habe die jetzt mal raus genommen und lasse das den AVR mal selber rechnen.


    Jemand einen wink mit dem Zaunpfahl für mich? ;(


    Gruß


    Prying

  • Snowfly, ich kann dein Autsch doch nicht so wirklich nachvollziehen!


    stell doch einfach mal dein 0,000000xx in Binärzahlen dar und überleg dir wie das ein 8Bit rechner wohl lösen könnte...
    (ich vermute mal die 2 Zeilen blähen den das Hexfile auf mindestens das doppelte auf)


    Hat der Mega32 tatsächlich 14 ADCs?


    zum Debuggen hat sich bei mir immer bewährt ein LCD anzuschliessen und dord die Variablen anzeigen zu lassen.


    EDIT: nochwas zu deinem letzten Code: wenn du wieder zurückdrehst sollte die LED doch auch wieder ausgehen?

  • Hey dgoersch, habe meinen Fehler DA dann gemerkt, ich hänge ja an (0) nicht an (7)!




    Nein der Atmega32 hat 8x also von ADC0 - ADC7.
    Habe an ADC0 den 50K Poti.


    Also im Tut, da wird das obige gesagt, deswegen bin ich auch von 10 Bit ausgegangen.....


    Da ich gerade mehrere Tuts auf habe, muss ich mich mal für eins entscheiden, bzw die Bascomhilfe sagt mir folgendes auf der Seite


    Und in meinem Code davor, passierte nichts egal in welcher richtung!


    Ich muss mal mein Poti durchmessen!


    EDIT:


    Also, an PA0 liegt je nach Stellung von 0 bis 4,99V an!
    Also das funktioniert.


    Mom


  • wie siehts damit aus?


    EDIT: edit

  • Was immer du gemacht hast, es geht!!


    Wie geht diese Magie? was hast du anders gemacht?


    Verläuft das bei einer PWM dann auch so?


    EDIT:


    dgoersch hat es ja schon angedeutet, du Snowfly hast es gemacht!!!


    Messergebnis = Getadc(0)
    In die Hauptschleife nicht davor!!!

  • Ja stimmt, das steht ja sogar noch in der Bascom Hilfe, zwar auf schwereren Englisch, aber es steht da!....



    Nunja.


    Ich habe jetzt mein PWM erfolgreich eingebeunden.


    Wenn der Wert 700 erreicht wird, schaltet LED 1 zu LED 2.


    Lustig ist nur wenn ich dem Timer einen Prescaler von 1 verpasse, sind die LEDs schwach und wenn ich dem eine 8tel Teilung gebe leuchten die schon ordentlich!


    Der Code:



    ABER.


    Wie sich alle denken können, möchte ich je nachdem, welche Poti Stellung ist, die LED Dimmen!^^


    Also 0 = Aus und 255 = voll an!


    UND dazu, habe ich noch nicht wirklich was verwendbares in der Hilfe finden können!


    Mit dem jetzt verwendetet IF Befehl geht es auf jedenfalls nicht! Logisch^^


    Danke schon mal für die Schnelle Hilfe euch beiden, bin schon ein gutes Stück weiter!!


    Prying

  • und auch den richtigen ADC abfragen(wie kommst du auf 14? hat da der compiler nicht gemeckert?)


    Von Magie ist das weit entfernt..
    ich lese mich gerade in Android programmierung ein, und verstehe praktisch nichts ;(
    ein bisschen kann ich nachvollziehen wie es dir gerade geht aber an reindenken und verstehen führt kein weg vorbei.


    Zitat

    Wie sich alle denken können, möchte ich je nachdem, welche Poti Stellung ist, die LED Dimmen!^^


    TIP:
    SOFTPWM:
    -zähler laufen lassen(8bit)
    -Messergebnis mit zählerstand vergleichen
    -je nach grösser oder kleiner LED ein oder ausschalten


    HARDPWM
    -PWM configurieren
    -Messergebnis in OCRx schreiben

  • Hallo Prying.


    Ich habe hier mal ein ganz einfaches Programm,
    welches nur zwei Potis am ADC einliest und die Werte an den Hardware
    PWM-Pin wieder ausgibt.
    Ich hoffe das brtingt dich weiter. R und G
    stehen für Rot und Grün. Ich musste mal einen speziellen Orange-Ton
    erzeugen und habe dazu diesen RGB Steller geschrieben.
    Basiert auf Benklys Mini-Fader.



  • Danke Paule!!!


    Ich werde noch schauen müssen, ob mir das noch weiter helfen wird!



    Snowfly


    Du meinst nen Counter statt einen Timer zusätzlich einbinden?


    Weil das ist gerade für mich, als wenn ein Chirurg mir gerade etwas von Schneidewinkel des Skalpell in der Menschlichen Haut mit Verhältnis zur Luft feuchte sagt!


    Oder muss ich den Timer jetzt abschaffen und den durch den Counter ersetzen, aber mit der gleichen Aufgabe das der Den verweisten PIN dann "Toggelt?
    ???


    EDIT:



    Quelle:
    http://halvar.at/elektronik/kl…_kurs/timer0_als_counter/

  • Led_r = R


    Der sagt der LED, bei mir PWMpin, das der gleichzusetzen ist wie R, bei mir Messergebnis!


    Ok, aber wie macht der das???
    Liegt die Ganze Antwort in dem = ?!


    Ich habe das dann so in den Testcode eingefügt, aber meine LED Flackert ganz schwach, bei 8tel Teilung des Timer, bei 1 ist sie fast garnicht zu sehen und es zeichnet sich ab, das durch drehen des Potis sich auch die Helligkeit verändert!


    EDIT:


    Ich habe die Einstellungen nun so vorgenommen:


    So wie sie jetzt sind, flackert die LED am wenigsten!!


    Ich vermute, würde ich eine HW PWM aufbauen, sähe das anders aus?!