Hallo Eine ganz spezielle Frage. Hat jemand mit einem ATMega128-16AI schon eine Led (1,5V 20mA) an einem Pin (z.B. am Port F) zum leuchten gebracht. Geschaltet wird der Widerstand gegen den Pin und gegen VCC. Bei meinen Schaltungen (2 Stück und mit 2X 128er) habe ich entweder 5Volt (5Volt gegen 5Volt am Pin => leuchtet nicht) oder 4,1Volt (am Pin => leuchtet auch nicht) am Pin. Können die 128 vielleicht nicht so viel schalten wie die anderen oder habe ich womöglich 2 defekte???? Gruß Wolf4124
Upps. Sie wird doch nicht.... Nein. Sie ist noch nicht unter den Tisch gefallen. Den Widerstand mit der Led in Reihe und dann auf VCC und das andere Ende an den Pin. (;-)
Hallo Hier die Daten. // CPU ist eine ATMega 128 #include <avr\io.h> //Einfügen der Headerdatei für die Namen der AVR Register usw. #include <stdint.h> //Weis noch nicht wo für //Deklaration der verwendeteten Funktionen im Programm int main(void); //Main int init_avr(void); //INIT vom AVR int main(void) { int init_avr(void); PORTF = 0xff; //oder auch mit 0xff; probiert } int init_avr(void) { //Initalisierung des AVR DDRF = 0xff; //Port F als Ausgang setzen }
> PORTF = 0xff; //oder auch mit 0xff; probiert Wie "oder auch"? Wenn du den Port auf 0xff setzt, siehst du natürlich bei nach Vcc geschalteten LEDs nichts. Aber dein Problem liegt vermutlich darin, daß du init_avr() in main() nochmal deklarierst, statt es aufzurufen. Daher wird dein DDRF nie gesetzt.
Danke für eure Hilfe. Es lag doch am Program. DDRF = 0xff; Falsch DDRF = 0xFF; Richtig Aber da muß man erst drauf kommen. Gruß Wolf4124
?? Das soll stimmen? Also bei mir geht 0xff auch ma mega 128 aber ich kann mir nicht vorstellen, dass eine LED zwischen VCC und PinF0 oder PinF1 leuchtet, wenn Port F 11111111 ist, wiel die LED dann zwischen VCC und VCC* liegt was nicht wirklich einen hinreichenden Potentialunterschied bewirkt 0x00 hingegen würde die Portpins auf GND legen, was bei richtiger polung zu leuchtenden LEDs führen würde ...
@Wolf4124
> Aber da muß man erst drauf kommen.
Das war hoechstens Zufall
Hier:
int main(void)
{
int init_avr(void);
Das hier, ist kein Funktionsaufruf. Das hier deklariert,
dass es irgendwo eine Funktion namens init_avr gibt, die
nichts annimmt und einen int zurueckgibt. Nicht mehr und nicht
weniger. Es ist insbesondere kein Funktionsaufruf!
int main()
{
init_avr();
Das hingegen ist ein Funktionsaufruf.
Da Deine init_avr nicht aufgerufen wurde, wurde natuerlich auch
DDRF = 0xff;
nicht ausgefuehrt und damit sind deine Ports nicht richtig
programmiert.
Ob du 0xff oder 0xFF schreibst, ist in C voellig egal (es sei
denn der Compiler hat einen schweren (!) Fehler. Der waere
aber sicher auch den Programmieren des Compilers aufgefallen.
Ein Compiler kriegt normalerweise immer eine umfangreiche Sammlungen
an Testcode zu schlucken, es wird das resultierende Programm
Byte fuer Byte mit einer Musterloesung verglichen und jeder
Abweichung nachgegangen).
Hallo Natürlich war Zufall. (;-) Ich habe aber auch die Funktion auf "init_avr();" geändert gehabt. Und es ist auch nicht gegangen. Ich habe auch noch in der Zeile von "PORTF = 0xff; //oder auch mit 0xff; probiert" auf "PORTF = 0x00; geändert. Am sieht es ja auch noch an dem Komentar, das ich da etwas probiert habe. Aber erst nach der Änderung von ff auf FF ging es. Das mit dem Funktionsaufruf wird sicher auch ein Fehler gewesen sein. Ich arbeite mit AVR-GCC. Aber nochmal danke für eure Hilfe. Gruß Wolf4124
Irgendwie ist mir Deine Vorgehensweise schleierhaft. Wenn Du ne LED in Serie mit einem Widerstand zwischen I/O Pin und VCC schaltest ( über die Polung brauchen wir ja nicht reden, oder ? ), dann machst Du das oberflächlich gesehen so: PINA1 als Ausgang setzten PINA1 auf High Pegel bringen und zum leuchten musst du einfach : PINA1 auf LOW bringen Das ist eigentlich alles ! Also bei High kein Licht bei Low Licht !!! mirki
Sowie ich es sehe habe ich zwei Fehler bei der Funktion PINA1 als Ausgang setzten (bei mir PortF) gehabt. Gruß
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.