Guten Abend! Hab ein Problemm mit dem ATmega 128 als fertiges Board mit 16Mhz Quarz(siehe Anhang). Programmierung in C über AVRstudio und einen USB-ISP Compiler. Wenn ich im die Ausgänge definiere (mit DDRA=0xff; und dann noch DDRE0=ff;) und ihm dann ganz einfach einen Port schalte (PORTE=(1<<PE0);) und das einfach mal herein lade, läuft alles erstmal so wie es soll. An den Ausgängen A ist kein Signal und an den ganzen Eingängen wird kein Signal angelegt und liegt auch keins an. Man kann dann auch schön seine fast 5V am Port E0 messen. Also alles soweit okay. Wenn ich jetzt jedoch ein Umfangreicheres Programm mit Eingangsabfragen über if und while mache bekomme ich im nicht beschalteten Zustand (nicht angeschlossen, die nackten Pins) richtig komische Zustände. Ausgänge um die 2,5V und Eingange um die 1,7V. Die Pull-Widerstände sind nicht deaktiviert worden oder des gleichen. Liegt das evtl. an einer Compilereinstellung oder sollte ich die Ein- & Ausgänge besser anders definieren und wenn wie (vielleicht ein kleines Beispiel). Danke schon mal für die Hilfe
Wie fragst Du denn die Eingänge genau ab? Poste das Programm Gruss Otto
hier mal Auszüge: #define F_CPU 16000000 #include <avr/io.h> #include <util/delay.h> // Übung mit Probeplatine !!! int main (void) { // Ausgänge-Eingänge definieren !!! DDRA=0xff; DDRB=0x00; DDRC=0x03; DDRD=0x00; DDRE=0x0f; DDRF=0xff; DDRG=0x00; while(1) // Endlosschleife damit das Programm nicht stoppt { if((PORTC&0x40) && (PORTD&0x80)) { PORTF~=(1<<PF3); PORTE~=(1<<PE1); PORTF=(1<<PF2); PORTE=(1<<PE0); } usw. Ich hoffe der kleine Auszug reicht um dir ein Bild machen zu können. Das Programm ist zwar größer aber immer nach diesem Muster aufgebaut. Einzige besonderheit das auch mal ein delay kommt aber sonst ganz schlicht mit if und while. Die Eingänge sind teilweise Taster oder auch Schaltkontakte(z.B. Endlagenschalter) die dann ein Signal auf den Eingang bringen.
So geht das nicht - lies bitte: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Eing.C3.A4nge_.28Wie_kommen_Signale_in_den_.C2.B5C.29 Gruss Otto
Wenn deine Ausgänge nicht wirklich VCC bzw. GND anliegen haben, z.B. nur ein Taster nach GND, fehlt ein PullUp. Die Pins werden mit PINA, PINB... abgefragt. Dafur gibt es http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports gruß avr
soll das vielleicht PORTF |= (1<<PF2); PORTE |= (1<<PE0); heißen?
DANKE !!! Tja, manchmal sieht man den Wald vor lauter Bäumen nicht. Ist in Tutorials ja auch extra rot markiert. Kann mir mein Fehler mit PORT und PIN schon erklären, hab halt Befehlzeilen (um die Arbeit zu erleichtern kopiert) und dann nur die Zahlen jeweils geändert und garnicht auf das geachtet, einfach glaubig überlesen. Aber kann das dann schon das spinnen der Ein und Ausgänge beheben oder ist da evtl. noch etwas anderes im argen???
Schreibe Dein Programm so, wie es im Tutorium steht. Wenn Du z. B. Ausgänge auf "1" setzt, deren DDR auf Eingang steht, schaltest Du nur den internen Pull-up. Otto
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.