kann es sein dass der ADC bei 16Mhz nur schrott ausspuckt?? ADMUX=(1<<6)|(1<<7); ADCSRA=(1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); ADCSRA|=(1<<ADIE); ADCSRA|= (1<<ADEN) | (1<<ADSC); SIGNAL(SIG_ADC) { char cOutText[100]; int nADCValue; nADCValue=(ADCH<<8)|ADCL; sprintf(cOutText,"measured%d : %d\r\n",(ADMUX&7),nADCValue); SendZTString0(cOutText); ADCSRA|=(1<<ADSC); if ((ADMUX&7)==7) ADMUX^=7; else ADMUX++; } das sollte doch gehn oder??? ich mein ist doch nicht im sinne des erfinders wenn ein adc immer das gleiche ausspuckt... und es kommt immer auf allen kanälen der gleiche wert raus... 73 de oe6jwf / hans
Moeglicherweise "verschluckt" sicht die ISR wg. der relative langen Ausfuehrungszeit der Ausgaberoutinen. Testweise koennte man die Ergebnisse der ADC im ISR in globale Variable/Feld ablegen (volatile!) und dann in der Hauptschleife ausgeben. Den ADC-Takt testweise auch mal auf moeglichst langsam einstellen hilft vielleicht auch. HTH, Martin
langsamer gehts ned...und die isr kommt an... es geht auch nicht im single conversion mode wenn das zeug im main nach dem init kommt... 73 de oe6jwf/hans
nach eingehendem studio des datenblattes (5 zeilen mal nicht übersprungen ;) weis ich jetzt was los war... nADCValue=(ADCH<<8)|ADCL; darf nicht sein... nADCValue=ADCL; nADCValue|=(ADCH<<8); geht... ADCL MUSS zuerst gelesen werden und DANN MUSS ADCH reingeholt werden... sonnst werden keine werte aktualisiert... 73 de oe6jwf / hans
Andere Merkwürdigkeiten: > ADMUX=(1<<6)|(1<<7); Die Benutzung der Bitnamen ist sicher sinnvoller. ;-) > ADCSRA=(1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); > ADCSRA|=(1<<ADIE); > ADCSRA|= (1<<ADEN) | (1<<ADSC); Hat so keinen Sinn. Alles außer dem ADEN kann in eine Anweisung, dann wird aus dem ADEN am Ende auch ein einzelnes SBI (und der Rest zu einem OUT). > if ((ADMUX&7)==7) > ADMUX^=7; Besser ist es, ADMUX gleich wieder auf den Dir ja bekannten Wert zu setzen -- das read/modify/write wird hier ziemlich aufwendig und setzt letztlich nur Werte, die Du ohnehin bereits vorab kennst.
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.