Hay Leute Ich versuche einen ADC mitz Codevision auszulesen und Spannung anzeigen zu lassen mein problem ist das er mir auf dem Display nur dies anzeigt read_adc(0) kommt das 255 wenn ich das ganze dann mal mit gleichung probiere also so (read_adc(0)*5.0)/1024.0 dann bekomm ich dies 24779 Ich habe am AVCC eine Spannung von 5V Anliegen. Wie müsste ich das machen bzw berechnen das ich auf meine 5V oder 5000mV komme.? MFG: Andre
es fehlen ein paar wichtige Angaben: machst du eine 8 oder 10 Bit ADC? Weil du was von 255 schreibst, tippe ich mal auf 8 Bit was hast du als Refernzspannung angegeben? Benutzt du die interne Referenz? Diese hat 2,54V, deine Spannung sollte also zwischen 0...2,54V liegen
ÄÄÄHHHMMM Ja also ich mache dies im 8Bit Modus. Aber bitte Frag mich jetzt mal nicht was ich als Refernzspannung nehme wo stelle ich die ein oder wo lege ich diese Fest.? Mfg. Andre
Glaubst Du wirklich, ohne Dein Programm zu sehen, kann Dir hier irgendjemand helfen?
Nein das war mir schon fast klar Sorry. #include <mega128.h> #include <delay.h> #include <math.h> #include "glcd_befehle.c" #define ADC_VREF_TYPE 0x60 // Read the 8 most significant bits // of the AD conversion result unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input|ADC_VREF_TYPE; // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; } // Declare your global variables here void main(void) { // Declare your local variables here char text[16]; // Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00; DDRA=0x00; // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=In Func0=In // State7=0 State6=0 State5=0 State4=0 State3=0 State2=T State1=T State0=T PORTC=0x00; DDRC=0xF8; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Port E initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTE=0x00; DDRE=0x00; // Port F initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTF=0x00; DDRF=0x00; // Port G initialization // Func4=In Func3=In Func2=In Func1=In Func0=In // State4=T State3=T State2=T State1=T State0=T PORTG=0x00; DDRG=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected ASSR=0x00; TCCR0=0x00; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // OC1C output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // Timer/Counter 3 initialization // Clock source: System Clock // Clock value: Timer 3 Stopped // Mode: Normal top=FFFFh // Noise Canceler: Off // Input Capture on Falling Edge // OC3A output: Discon. // OC3B output: Discon. // OC3C output: Discon. // Timer 3 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR3A=0x00; TCCR3B=0x00; TCNT3H=0x00; TCNT3L=0x00; ICR3H=0x00; ICR3L=0x00; OCR3AH=0x00; OCR3AL=0x00; OCR3BH=0x00; OCR3BL=0x00; OCR3CH=0x00; OCR3CL=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off // INT3: Off // INT4: Off // INT5: Off // INT6: Off // INT7: Off EICRA=0x00; EICRB=0x00; EIMSK=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; ETIMSK=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC Clock frequency: 1000,000 kHz // ADC Voltage Reference: AVCC pin // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE; ADCSRA=0x87; //Zum Initialisieren des GLCD glcd_init_display(); while (1) { sprintf(text,"%03u",read_adc(0)); //0.004883 glcd_printstring(4,10,text); sprintf(text,"%03u",read_adc(0)*0.004883); //0.004883 read_adc*5V/1024 glcd_printstring(4,20,text); delay_ms(50); }; }
die Referenzspannung stellst du ein wenn du im Codevision Code Generator den ADC an schaltest. Da stellst du bei Volt. Ref Int, cap. on AREF ein und schließt einen Kondensator von AREF nach GND (100nF) jetzt kannst du Spannungen zwischen 0 bis 2,54V messen. Andere Frage: hat es einen Grund warum du nicht den 10 Bit Modus benutzt? Und was für ein LCD ist da angeschlossen?
Wie stelle ich denn, den 10bit Modus im Codevision ein.? Das LCD ist ein selbst geschriebenes von mir für den t6963c Controller. MFG: Andre
der 10 Bit Modus ist der default Modus (nicht bei 8 Bit den Haken setzen) Dann gibt er dir einen Wert zwischen 0 und 1024 raus. Nochwas: Wenn du zB 0 bis 5V messen willst, brauchst du einen Spannungsteiler idealerweise mit zwei gleichen Widerständen. (zB 10k)
genau 1023 zeigt er mir an. Okay das funktioniert wunderbar und wie sieht nun die berechnung zum anzeigen der Spannung aus.? MFG: Andre
verrätst du uns bitte mal welchen Spannungsbereich du messen willst? Raten ist zwar lustig, aber naja...
Andre wrote: > genau 1023 zeigt er mir an. > > Okay das funktioniert wunderbar und wie sieht nun die berechnung zum > anzeigen der Spannung aus.? 1023 Äpfel kosten 5 Euro. Wieviel kosten x Äpfel?
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.