-         

Ergebnis 1 bis 8 von 8

Thema: BASCOM Temperaturauswertung mittels A/D Wadler

  1. #1

    BASCOM Temperaturauswertung mittels A/D Wadler

    Anzeige

    Hallo zusammen,

    ich möchte mittels eines Atmega8 einen Infrarottemperatursensor auswerten.
    Der Sensor liefert mir eine Spannung von 0-5V.

    Ich habe aber noch nie den A/D Wandler im Atmega8 benutzt und habe überhaupt keine Ahnung wie man den programmiert.

    Kann mir bitte einer helfen.

    Ich will ab einer bestimmten Spannung ( 2,601V) eine LED aufleuchten lassen,
    wenn die Spannung dann steigt (ab 3,421V) die selbe LED blinken lassen, und wenn die Spannung dann noch weiter steigt (ab 3,734V), will ich eine 2 Led anschalten.
    Wenn ihr meint die Schritte sind zu gering kann man den mittleren Schritt auch wegfallen lassen!

    Es wäre super nett wenn mir einer bei der Programmierung und der verdrahtung Tips geben könnte.

    Vielen Dank!
    Und einen sonnigen Tag

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    Hi Digsta,

    die Anforderungen an den AD sind nicht zu hoch, die Schritte sind
    ewig weit auseinander für den AD.
    Rechnen wir mal,

    also 0-5V ist prima, weil der Mega8 schön mit 5V betriben werden kann,
    die Referenzspannung kann dann auch schön 5V sein.
    Der AD hat eine Auflösung von 10 Bit, sprich von 0 bis Vollausschlag
    währen es dann 2^10 Abstufungen, also 1023 währe dann 5V
    am AD-Eingang.
    Daraus ergibt sich eine Abstufung von 0,0048V je Digit,
    also rund 4,8mV je Digit.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Vielen Dank

    Für die schnelle Antwort!

    Das ist ja schon einmal gut zu hören. Jetzt brauche ich nur paar Tips zur Programmierung und zur Verdrahtung.

    Vielen Dank noch einmal!

    Gruss

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    Programmierung ist per Bascom supereinfach.

    erstmal:
    config ADC etc.

    dann:
    getadc(x)
    und schon haste den Wert, schau mal in die Bascomhilfe unter
    Config ADC oder Getadc.

    Verdrahtung ist einfach, AREF auf 5V und n paar 100nF Kondensatoren
    an die Pins des µC für Spannungsversorgung um die Betriebsspannung
    schön stabil zu halten.
    Betriebsspannung am einfachsten auf 5V einregeln über Linearregler 7805
    und fertig ist der Lack.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Hallo Vitis

    Ok das mir der Verdrahtung hab ich dann wohl geschafft!

    Danke für die Tips aber mit dem Prog komm ich nicht wirklich weiter, hättest du etwas Zeit mir das genauer zu beschreiben.
    Ich habe schon im Roland Walter AVR nachgelesen aber ich scheine das irgenwie nicht zu verstehen.

    Sorry für die Frage !

    Vielen Dank.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    ja, der Rowalt ist beim AD-Wandler n bissl zu schnell.
    Ich finde es gut, dass er für die Meisten Funktionen nicht
    die Bascom Highlevelbefehle verwendet, sondern die
    Registeraktion, weil das eben immer funktioniert, auch
    bei Bausteinen die nicht ganz alltäglich sind oder für
    Funktionen, die eben irgendwie "ausser der Norm" sind,
    aber für den Einstieg machen die Registeraktionen eben
    das Leben etwas schwerer.
    Bascom hat für den AD-Wandler nen bestimmten Befehlssatz.


    in der Bascom Hilfe ist n einfaches Beispiel für die Verwendung
    des internen ADC drin :

    Code:
    Config Adc = Single , Prescaler = Auto
    'Now give power to the chip
    Start Adc
    
    'With STOP ADC, you can remove the power from the chip
    'Stop Adc
    
    Dim W As Word , Channel As Byte
    
    Channel = 0
    'now read A/D value from channel 0 to 7
    Do
      W = Getadc(channel)
      Print "Channel " ; Channel ; " value " ; W
      Incr Channel
      If Channel > 7 Then Channel = 0
    Loop
    End
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    29.03.2007
    Beiträge
    64
    Also ich bin auch absoluter Einsteiger und kann das Buch von Roland Walter nur Empfehlen.

    Hier mal ein ADC Beispiel für einen Tiny45:
    Code:
    '############ADC ###############################################################
    
    On Adc Onadc                                                'Interrupt für Adc Wert
    
    Admux = &B00100010
    '         ^^-----------------Voltage Reference:00=Vcc
    '           ^----------------Left Adjust
    '            ^---------------Not Used
    '             ^^^^-----------Analog Channel:0010=ADC2 PB4
    
    Adcsra = &B11111110
    '          ^-----------------Adc Enable
    '           ^----------------Adc Start Conversion
    '            ^---------------Adc Auto Trigger Enable
    '             ^--------------Adc Interrupt Flag
    '              ^-------------Adc Interrupt Enable
    '               ^^^----------Adc Prescaler Select Bits
    '### Hauptschleife   ##################################################
    Dim Akku_low As Bit   
    Dim Analog As Word    
    Do
    
    Loop
    '### Analog Digital Converter ##################################################
    Onadc:                                                      ' Interrupt ADC
    Analog = Adch                                               'ADC Wert an Variable übergeben
    If Analog < 15 Then
    Akku_low = 1                                                'Akku_low Bit bilden
    End If
    If Analog > 20 Then
    Akku_low = 0
    End If
    Return
    Wenn der ADC Kanal einen neuen Wert empfängt, wird der Interrupt
    ausgelöst, dort wird das Akku_Low Bit gebildet und kann in der Hauptschleife verarbeitet werden. Die Register Admux und Adcsra musst du auf deinen Controller bzw. verwendeten ADC Eingang anpassen.
    Keine Angst vorm Datenblatt es ist sehr einfach die Register zu schreiben. Ich selbst benutze lieber die Register als Highlevelbefehle.


    Gruß
    Daniel

  8. #8
    Guten morgen,

    noch einmal Danke für die Ideen, ich habe mal ein Programm geschrieben, weiss aber nicht ob es funktioniert, denn erstens scheint mein Sensor nicht so richtig zu arbeiten und 2 habe ich ein Problem, ich habe gelesen das der Pin 5 nur max 8 Bit beim A/D Wandler hat aber es funktioniert nur wenn ich es mit 10 Bit rechne, hier mal mein Code.
    Sagt m,ir bitte was ihr davon haltet!
    Die Led habe ich nur als Test erstmal geschaltet, damit ich verfolgen kann bei welchem Wert der Sensor gerade ist.


    $regfile = "m8def.dat"
    $crystal = 1000000
    $baud = 9600

    Ddrc = &B00000000

    Dim Tempwert As Long

    Config Pinb.2 = Output 'Rote LED
    Led_red Alias Portb.2
    Config Pinb.1 = Output 'Grüne LED
    Led_green Alias Portb.1


    Config Adc = Single , Prescaler = Auto

    Do
    Start Adc
    Tempwert = Getadc(5)
    If Tempwert < 541 Then 'entspricht 2,601V
    Set Led_green
    Set Led_red
    Waitms 250
    Reset Led_green
    Reset Led_red
    Waitms 250
    Else
    If Tempwert < 651 Then 'entspricht 3,128V
    Set Led_green
    Reset Led_red
    Else
    If Tempwert < 777 Then 'entspricht 3,734V
    Reset Led_red
    Set Led_green
    Waitms 250
    Reset Led_green
    Waitms 250
    Else
    If Tempwert > 777 Then
    Reset Led_green
    Set Led_red
    End If
    End If
    End If
    End If
    Loop

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •