Hallo ich bin nochn neu in sachen assembler und AVR und brauche mal hilfe. ich will bei meinem mega16 nen wert des AD_wandlers in ein register, zb. r20 laden. Wie mache ich das? Weil mit den codebeisp. im datenblatt komm ich nicht weiter. mfg nesso
Wenn Du mit 10 Bit Auflösung arbeitest, kriegste das Ergebnis eh nicht in ein einzelnes Register. Bsp.: in r20, ADCL in r21, ADCH Wichtig: erst das Low-Byte lesen (ADCL)!
ahh ok aber brauch ich da mehr als einen IO als eingang? und wie is des mit der Vref muss die>= zu messende V sein? oder dient das dem uC nur als Mess hilfe?
VREF ist die Referenzspannung, auf die der Messbereich des ADC abgebildet wird (1 LSB -> VREF/1024 beim 10-Bit-ADC). VREF muss also größer sein als die zu messende Spannung. Wenn Du nur eine Spannung messen willst, brauchste auch nur einen Analog-Eingang.
Das 'Least Significant Bit', also das niederwertigste Bit (Bit Nr. 0). Das ist die kleinste Stufe, die mit einer Binärzahl darstellbar ist, also der kleinste Wert, den der Wandler auflösen kann. Du solltest Dich aber wirklich mal mit den Grundlagen auseinandersetzen:-) Gruß Johnny
ja ok das lsb das niedriegste bit ist weiß ich ich dachte hier heißt es was anderes, weil "1 LSB -> VREF/1024 beim 10-Bit-ADC" kam mir komisch vor was hat das mit dem lsb zu tun und für was die 1?
Ich war zu faul, "Ein LSB" zu schreiben, deshalb habe ich "1 LSB" geschrieben. Sorry, wenns verwirrt hat. Das LSB ist die kleinste Darstellbare Zahl (Entspricht einer '1'). Wenn man eine Binär-Zahl mit n Bit hat, dann kann man mit dieser Zahl 2^n Zustände darstellen. Ein A/D-Wandler tut nix anderes als einen analogen Messwert digital auf seinen Wertebereich abzubilden. Der Wertebereich eines A/D-Wandlers mit 10 Bit Auflösung sind also die mit 10 Bit darstellbaren Zahlen (0...1023). Um dem ADC zu sagen, welcher Wert der größten darstellbaren Zahl entspricht, wird die Referenzspannung benötigt. Diese wird in 2^n (also bei 10 Bit 1024) Schritte aufgeteilt. Vref / 2^n oder hier speziell Vref / 1024 ist damit ein LSB, also der kleinste darstellbare Wert. Ich hoffe das war jetzt verständlicher. Hat mir meine Schreibfaulheit nix genützt...
Hallo, ein kleiner Tip noch am Rande, für die weitere Verarbeitung des Ergebnisses ist es besser ein 16-Bit-Registerpaar zu nehmen. Davon gibt es 4 Stück im AVR. Es sind die Register: r24-r25,(ohne Namen), r26-r27(XL-XH), r28-r29(YL-YH) und r30-r31(ZL-ZH). Es grüsst Arno
Hallo, ich probiere gerade einen Wert mit einem Tiny15 einzulesen. Allerdings macht der AVR nicht das was er soll. Ich möchte die Versorgungsspannung als Referenzspannung benutzen, den ADC starten und nach einer kurzen Pause den Wert auslesen. Nach 25ms sollte der ADC doch fertig sein oder kann ich das so nicht realisieren ? reset: sbi PORTB,TxD ;Init port pins sbi DDRB,TxD sbi admux,mux1 ;Eingang 2 wählen sbi adcsr,adps0 sbi adcsr,adps2 ;Teiler durch 8 sbi adcsr,aden ;ADC aktivieren rcall pause ;25ms forever: sbi adcsr, adsc ;Start Wandlung rcall pause ;kurz warten in txbyte,adcl ;LowByte einlesen usw....
Ich stell Euch mal ein kleines ADC-Beispiel zur Verfügung (Initialisierung + Messen). Es ist zwar für einen ATmega8 geschrieben, kann aber problemlos auf einen anderen µC angepasst werden. Bernhard
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.