PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sehr dringend - Programmablauf anders als gedacht?



dasisch
03.01.2008, 17:56
Hi Leutz,

ich habe die Grundschaltung aus dem AVR-Tutorial im Wiki gebastelt und einen Quarz mit 8MHz verbaut. Danach wollte ich die LED an Pin22 an uns ausschalten - und zwar so, dass sie eine Sekunde an bleibt und danach 3 Sekunden aus ist. Also habe ich folgendes Programm geschrieben:


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000

Config Portc.0 = Output

Do
Portc.0 = 0
Waitms 1000
Portc.0 = 1
Waitms 3000
Loop

End

Soweit so gut, denn eigentlich sollte das Ergebnis das oben beschriebene sein. Allerdings macht mein Controller etwas ganz anderes: Er schaltet die LED für 3 Sekunden an und danach für eine Sekunde aus. Erst wenn ich die 1000 ms durch 3000 ersetze und die 3000ms durch 1000, dann erreiche ich das richtige Ergebnis.

Warum ist das so und was mache ich falsch? Wäre sehr sehr dankbar für eine schnelle Antwort, da ich meine Jahresarbeit für's Abi fertig schreiben muss und nun auf dieses unerklärliche Problem gestoßen bin.

Vielen Dank im Voraus!
Sven - Oliver

PicNick
03.01.2008, 17:59
Kommt wohl drauf an ob die LED bei
Portc.0 = 0 oder bei
Portc.0 = 1 leuchtet

wie ist sie denn angeschlossen ?

EDIT: die Wiki-schaltung hast du genau nachgebaut ?

dasisch
03.01.2008, 18:07
eigentlich so, wie in dem schaltplan (https://www.roboternetz.de/wissen/index.php/Bild:Avrtutorial_grundschaltung_mitled.gif) - Die Kathode ist an den Widerstand angeschlossen, die Anode an VCC.

Ich dachte, wenn ich Portc.0 = 0 schreibe, dass dort dann 0 V anliegen - folglich dürfte die LED doch dann nicht leuchten, oder?

dasisch
03.01.2008, 18:11
kann es sein, dass das an der Potentialdifferenz liegt, sodass, wenn ich den Portc.0 = 0 schalte, die Potientialdifferenz 5V beträgt und die LED deshalb leuchtet?

PicNick
03.01.2008, 18:17
In der Schaltung isses so, dass die LED leuchtet, wenn Portc.0 = 0
Probier's einfach:
Testprogramm


Config Portc.0 = Output
Portc.0 = 0 ' leucht' sie nu oder nicht ?
END

Gegencheck


--
Portc.0 = 1 ' leucht' sie nu oder nicht ?
END

dasisch
03.01.2008, 18:22
ja, gut, dass sie bei Portc.0 = 0 leuchtet, das habe ich ja schon festgestellt. Ich müsste nur wissen, warum das in der Schaltung so ist. Stimmt meine obige Vermutung oder liegt das an etwas anderem?

PicNick
03.01.2008, 18:40
Ohne Umschweife: Deine Vermutung ist richtig

recycle
03.01.2008, 18:45
ja, gut, dass sie bei Portc.0 = 0 leuchtet, das habe ich ja schon festgestellt. Ich müsste nur wissen, warum das in der Schaltung so ist. Stimmt meine obige Vermutung oder liegt das an etwas anderem?


Guck dir die Schaltung mal genau an: https://www.roboternetz.de/wissen/index.php/Bild:Avrtutorial_grundschaltung_mitled.gif


Die LED hängt zwischen 5V und Controllerpin. also geht sie an, wenn der Controller sie auf GND schaltet und das macht er wenn man den PIN auf 0 schaltet.

Wenn du den Pin auf 1 schaltest liegt er auf "high"-Pegel. Das heisst die LED hängt zwischen 5V und 5V und dann fliesst kein Strom der sie zum leuchten motivieren könnte.

Wenn du die LED (richtigherum) zwischen Controlerpin und GND hängst, leuchtet sie, sobald du den Pin auf 1 schaltest.
Das wird aber meist nicht so gemacht, weil der Controlerpin "angeblich" mehr Strom gegen Masse schalten als selber liefern kann.

"Angeblich" habe ich hier geschrieben, weil ich nicht sicher bin, ob das bei den aktuellen Controllern immer noch der Fall ist oder ob man es inzwischen nur noch aus Gewohnheit so macht.

dasisch
03.01.2008, 20:10
alles klar - ich danke euch für eure Hilfe! Dann war meine Vermutung mit der Potentialdifferenz doch richtig und ich kann denen das jetzt auch plausibel erklären :) werde euch demnächst sicherlich noch mit weiteren fragen quälen - es gibt noch viel zu tun ;)

Viele Grüße,
Sven