Ich will vom Ad ein wert auslesen und diesen dann auf einem lcd anzeigen. Mein Programm: char buffer[7]; int num; sbi(ADCSR,ADSC); while(bit_is_set(ADCSR,ADSC)); //warten bis wandlung fertig num = (inp(ADCL)+(inp(ADCH)*256)); //high und low zusammensetzen /* convert interger into string */ itoa( num , buffer, 10); /* put converted string to display */ lcd_puts(buffer); Ich glaub das problem ist dass ich ein unsigned int aus dem register auslese und dann in ein int schreibe. Wie mach ich die typumwandlung?
Falls du mit avrgcc arbeitest, warum schreibst du es nicht so: unsigned short ad_wert = 0; ... ... ... ad_wert = ADC; ... ... Gruß, Alex
Ich hab jetzt: num = (inp(ADCL)+(inp(ADCH)*256)); durch: num = ADC; ersetzt. dann kam: `ADC' undeclared (firs t use in this function) ich hab folgende headerfiles: #include <stdlib.h> #include <avr/io.h> #include "lcd.h"
aus iom16.h, wird von avr/io.h eingebunden: /* ADC */ #define ADCW _SFR_IO16(0x04) #define ADCL _SFR_IO8(0x04) #define ADCH _SFR_IO8(0x05) Probiers mit num = ADCW; Stefan
Danke für den tip ist ja viel einfacher und übersichtlicher. der wert auf dem lcd stimmt aber immernoch nicht. bei 10 bit ad und höchstem wert müsste ja 2048 auf dem lcd angezeigt werden es sind aber ca. 700
2^10 ist bei mir 1024 Auf welchem Potential ist AREF bzw. wie hast du die REFSn Bits konfiguriert? Gruß, Alex
aref , avcc, ADC1 alle auf 5V ich hab vcc direkt mit der analogspannung gekoppelt kann daher der fehler kommen?
alles klar hab den fehler gefunden. war nur ne fehlende Lötverbindung!! so ne scheiße.
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.