PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom hex Werte H und L des ADC auslesen



Wool
28.02.2014, 19:21
Hallo Leute ich AVR Anfänger wole etwas lernen. Im mikrocontroller.net konnte mir leider keiner helfen.

Ich möchte die hex Werte H und L des ADC auslesen komme nicht weiter.

Habe es geschafft laut Roland Walter Buch die H Bits auf Tastendruck
auszulesen.

Aber ich bekomme immer nur eine zweistellige hex raus.
Ich wollte 10 Byte. Eine dreistellige hex.

Hier mein Listing für Basecom

$Regfile="m8def.dat" 'ATmega8-Deklarationen
$Crystal=3686400 'Quarz: 3,6864 MHz
$baud = 9600 'Baudrate zum PC: 9600 Baud
Declare Sub Keypressed
Portd.5 = 1
DDRC =&B00000000 'PC7...PC0=0: PortC-Pins auf Eingang
Admux = &B01100000 'Bits7+6=01: Aref ist intern verbunden
? 'Bit5=1: LeftAdjust, nur 8 Bit in ADCH „WAS muss ich hier
ändern???“
'Bits3...0=0000: Pin ADC0 wählen
ADCSRA=&B11100010 'Bit7=1:AdcOn,Bit6=1:Start,Bit5=1:Frei
'Bits2+1+0=010: AdcClock=AvrClock/4
Do
Debounce Pind.5 , 0 , Keypressed , Sub
Loop
End
Sub Keypressed
Udr = Adch
End Sub
End

Schon mal vielen Dank.
http://www.mikrocontroller.net/topic/325865#new
habe schon fast alles ausprobiert. eigentlich alles.:(

radbruch
01.03.2014, 08:20
Hallo

"Admux = &B01100000 'Bits7+6=01: Aref ist intern verbunden
? 'Bit5=1: LeftAdjust, nur 8 Bit in ADCH „WAS muss ich hier..."

Bit 5 (ADLAR) muss 0 sein. Dann wird das Ergebniss der Wandlung in den Bits 0 bis 9 gespeichert. Beschreibung von Bit5 im Datenblatt:


• Bit 5 – ADLAR: ADC Left Adjust Result
The ADLAR bit affects the presentation of the ADC conversion result in the ADC Data
Register. Write one to ADLAR to left adjust the result. Otherwise, the result is right
adjusted. Changing the ADLAR bit will affect the ADC Data Register immediately,
regardless of any ongoing conversions. For a complete description of this bit, see “The
ADC Data Register – ADCL and ADCH” on page 208.



Aber möglicherweise habe ich deine Frage falsch verstanden:

"Aber ich bekomme immer nur eine zweistellige hex raus."

Mehr kann auch in ADCH nicht drinstehen. Die drei Hexstellen sind auf ADCH und ADCL verteilt. Eine Hexziffer representiert genau 4 Bits, auch ein Nibble genannt. Die Bits 0-3 sind das Lownibble, Bits 4-7 das Highnibble. Beide zusammen bilden das Byte welches jeweils in ADCH und ADCL gespeichert werden kann. ADCH und ADCL zusammen bilden dann die 16 Bits in die das Ergebniss der Wandlung gespeichert wird. Mit ADLAR = 0 wird das Ergebniss rechtsbündig in die Bits 0-9 in ADC (=ADCH und ADCL zusammen) kopiert, bei ADLAR = 1 in die Bits 6 bis 15 von ADC:


1111 11
5432 1098 7654 3210
HHHH HHHH LLLL LLLL | ADC

xxxx xx98 7654 3210 | ADLAR = 0
9876 5432 10xx xxxx | ADLAR = 1


Gruß

mic

Wool
01.03.2014, 13:52
Vielen Dank das du dich um mein Problem kümmerst.

Ich benutze AVR terminal über Podi 5V und Taster hex o. bin werte auslesen.
Ich bekomme aus dem ADCH FF = 255 das ist ok, aber ich möchte doch
h 3FF = 1023 bei 10 Bit. Wie komme ich an den (register) wo die 16 Bit drinnen sind.
Wenn ich Ergebnis = 256 * ADCH
Ergebnis = Ergebnis + ADCL bekomme ich auch nur FF raus ich müsste doch dann auf 3FF = 1023 kommen das bekomme ich nicht hin.

Mir geht es im moment nicht um die Spannung nur um die 3FF o. Dez 1023

Ich weis das erst h byte dann l byte gespeischert werden wie bekomme ich die zur einer zahl. Kann es sein das das AVR terminal das nicht schafft.
Und könnte ich es über den BASECOM Simulator anzeigen?
Noch mal vielen Dank . Irgendwie bin ich am ende.

Auf der Seite ist es gut erklärt
http://www.avr-modelleisenbahn.de/controller/atmega8/18-5-adc-ergebnis-atmega8.htm
Nachdem eine Wandlung abgeschlossen ist (ADIF ist High), kann das Ergebnis der Wandlung in den ADC Result Registern ADCL und ADCH abgeholt werden. „aber wie?“

radbruch
01.03.2014, 14:54
Hallo

An die 10 Bit kommst du, wenn du eine 16-Bit Variable (vom Typ Word) mit dem Ergebniss der Wandlung (mit ADLAR=0 ) lädst:


Dim Adcwert16bit As Word

Adcwert16bit = Adc

'oder

Adcwert16bit = Adch * 256
Adcwert16bit = Adcwert16bit + Adcl


[Edit]
Wenn Udr das Senderegister des USART ist funktioniert es nicht, weil Udr nur 8 Bit breit ist. In diesem Fall unterschlägt man dann die niederwertigen Bits im Ergebniss, schiebt alles nach links und sendet nur ADCH mit den 8 hochwertigen Bits. Dann hat man allerdings nur einen 8BIT-ADC. Kleinster Schritt mit 10 Bit ist 5V/1024 ca. 5mV, bei 8Bit das vierfache eben (ca. 20mV). Die Formel muss du dann natürlich auch anpassen:

Vin = Vref*ADC/255

Gruß

mic

Michael
01.03.2014, 16:28
auch ein Nipple genannt.
http://thefunniestpictures.com/wp-content/uploads/2013/10/Funny-Pics-2014-Wolverine-Nipple-Twist.jpg

Vermutlich meintest du Nibble, sorry, ich konnte mich nicht beherrschen ;)

Gruß, Michael

radbruch
01.03.2014, 16:44
Vermutlich meintest du Nibble, sorry, ich konnte mich nicht beherrschenUpps, ja, meinte ich :oops:

Danke für den Hinweis.

Gruß

mic

Wool
01.03.2014, 16:49
Jetzt habe ich es begriffen! Vielen vielen Dank!!! Liebe grüße aus Marburg/Lahn jürg