Hallo, beim meinem Versuch, (auf dem ATmega16 funktionierenden) Code für den AD-Wandler vom ATmega16 auf den ATmega8 zu übertragen, ist was schiefgegangen. Der untenstehende Code funktioniert für den ATmega16 kompiliert im Simulator einwandfrei. Für den ATmega8 kompiliert hängt er sich beim zweiten "while(ADCSRA & (1 << ADSC));" auf. Das ADSC Flag wird nicht zurückgesetzt. Als Simulator verwende ich AVRStudio 4.10 Build 356. Was habe ich falsch gemacht??? MfG - cl #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> int main(void) { int i; ADCSRA = (1 << ADEN) | 0x06; ADMUX = 0x00; for (i = 0; i < 16; i++) { while(ADCSRA & (1 << ADSC)); ADCSRA |= (1 << ADSC); while(ADCSRA & (1 << ADSC)); } return(0); }
Hat leider keine Veränderung gebracht. Hängt sich immer noch auf. Durch die erste while-Schleife der ursprünglichen Version läuft er durch und gelangt dann zur zweiten while-Schleife. Dort hängt er sich auf. gruebel
@A.K.: Der ADC-Takt war außerhalb. Teiler jetzt auf 128 geändert, geht allerdings "genausogut" wie vorher, nämlich garnicht :-(((( In echter Hardware tut sich auch nix. Mein Code sieht jetzt so aus: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> volatile uint8_t x = 0; int main(void) { uint8_t x; DDRD = 0xff; ADCSRA = (1 << ADEN) | 0x07; ADMUX = 0x40; while(1) { ADCSRA |= (1 << ADSC); while(ADCSRA & (1 << ADSC)); x++; if (x & 0x01) PORTD = 0x00; else PORTD = 0xff; } return(0); }
Du hast DDRD=0xff und somit den gesamten PORTD auf Output initialisiert. Die Spannung die du an den ADC von außen anlegst die er Digitalisieren soll ist aber INPUT :) Versuch mal den endsprechenden Pin wo du die Spannung anlegst als Input zu initialisieren. :) mfg Christian
also ich würde das so machen: while(!(ADCSRA & (1<<ADIF))) ; Grüße Walter
@Christian B.: Beim ATmega8 ist aber doch IMHO der AD-Wandler auf PORTC :)
Wollte nicht das Datenblatt bemühen ^^ , war nur ein gedanke der mir durch den Kopf ging als ich das gesehen habe :) und nu geh ich schlafen g
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.