PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [gelöst] Anfängerproblem: Pins tun nicht das, was ich will..



jawo3
25.09.2007, 14:39
Hi, ich habe mal wieder ein Problem.

Undzwar habe ich nur eine LED mit Vorwiderstand am PORTC Pin0.

Mit diesem Programm leuchtet die LED:


#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
int main()
{
DDRC=0xFF;
PORTC=0x00; //Alle Pins auf "Low"
while (1);
}


Aber mit diesem hier nicht:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
int main()
{
DDRC=0xFF;
PORTC=0xFF; //Alle Pins auf "High"
while (1);
}

Dabei habe ich in Tutorials gelesen, dass die Ausgangspins, wenn man sie auf High schaltet 5V ausgeben.

Und eigentlich sollte doch erst ein:
PORTC=0x01;
den Pin0 High schalten und nicht ein
PORTC=0x00;
oder?

Aber wenn ich 0x01 nehme, dann habe ich die Spannung auf Pin1.
Und das witzigste: Wenn ich alle Pins High schalte (PORTC=0xFF) habe ich auf keinem Pin des Ports eine Spannung.
:-s

Hilfe! ](*,)

jawo3

Hubert.G
25.09.2007, 15:07
Du hast die LED gegen +5V geschalten.
Wenn du auf den Pin misst, dann gegen +5V oder gegen GND?

jawo3
25.09.2007, 15:16
Ich habe die LED gegen 5V geschaltet.

Mir ist gerade aufgefallen, dass ich gegen VCC gemessen habe.
Wen ich gegen GND messe habe ich 5V an allen Pins außer Pin1, aber die LED an Pin0 leuchtet nicht.

Das aktuelle Programm ist dieses:


#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>

int main()
{
DDRC=0xFF;
PORTC=0x01;
}

Wo ist der Fehler?

Hubert.G
25.09.2007, 18:04
Hast du beim kompilieren die optimierung ausgeschaltet? Ja und noch wichtiger hast du in den Fuses JTAG disabled, sonst funktioniert ein Teil von PortC nicht.

jawo3
25.09.2007, 18:32
Sorry, aber es wäre schön, wenn du mir sagen könntest, wo genau ich diese Funktionen finde, da ich mich erst seit einiger Zeit mit dem Compiler beschäftige... O:)

CsT
25.09.2007, 18:38
Bin jetzt nicht der E-Techniker, der dir erklären kann warum und weswegen das so ist, jedenfalls hast du die LED mit Sicherheit so angeschlossen, dass sie im Low-Zustand leuchtet. Ist beim RN-Control genauso.
Also wenn die LED leuchten soll, dann den Pin auf 0 schalten, wenn sie aus sein soll auf 1.

Grüße CsT

Hubert.G
25.09.2007, 18:39
Ich weiss nicht welchen Compiler du verwendest, aber ändere mal zuerst die Fuses, bei JTAGEN darf kein Haken sein.

jawo3
25.09.2007, 18:47
Also ich habe WinAVR und es scheint tatsächlich so zu sein, dass die LED immer nur dann leuchtet, wenn der Pin auf Low geschaltet ist, aber es wäre schön, wenn ich das ändern könnte, weil ich adnn näher an den Tutorials arbeiten könnte.

Die einzige Funktion die ich gefunden habe um etwas wie JTAGEN auszuschalten ist bei Ponyprog, und da habe ich kein Häkchen.

Trotzdem leuchtet die LED nur bei Low.

djdune
25.09.2007, 18:55
Dann hast du die LED wahrscheinlich zwischen PIN und PLUS geschalten. Machs zwischen PIN und Masse, dann sollte sie nur leuchten, wenn Highpegel ist.

hosti
25.09.2007, 18:55
Bist du dir sicher, dass du die led nicht auf VCC schaltest? dann leuchtet sie bei Low und bei High nicht, da sie ja das selbe Pontential hat...

jawo3
25.09.2007, 19:01
Ich habe doch schon bei meinem zweiten Beitrag in diesem Thread geschrieben, dass ich die LED auf VCC geschaltet habe...

Jetzt gehts jedenfalls.

Vielen Dank!

PS: Ich habe gerade im Makefile gesehen, dass dort die Optimierung auf "s" steht. Soll ich die auf "0" setzen oder so lassen und wofür ist die da?

Gock
25.09.2007, 19:01
Also ich versteh' Dein Problem nicht: Du hast Die LEDs gegen VCC geschaltet, wenn Du Die Ausgangsports auf High=1 legst ist die LED aus und bei Low=0 an. Dann misst Du wie Du schreibst und wunderst Dich? Das ist doch absolut erwartungsgemäß!
Wo ist das Problem? Wenn DU willst, dass die LED bei High=1 leuchtet, dann musst Du sie gegen GND schalten.
Gruß

EDIT:
OK, ich war der langsamste, aber weniger als eine Minute...
;-)

jawo3
25.09.2007, 19:05
Also ich versteh' Dein Problem nicht: Du hast Die LEDs gegen VCC geschaltet, wenn Du Die Ausgangsports auf High=1 legst ist die LED aus und bei Low=0 an. Dann misst Du wie Du schreibst und wunderst Dich? Das ist doch absolut erwartungsgemäß!
Wo ist das Problem? Wenn DU willst, dass die LED bei High=1 leuchtet, dann musst Du sie gegen GND schalten.


Mein Problem lag darin, dass ich nicht wusste welche Auswirkung ein Schalten auf VCC bzw. GND auf meinen Pin hat.
Wenn ich gewusst hätte, dass ein auf VCC geschalteter Pin eine LED nur bei Low zum Leuchten bringt, hätte ich hier sicherlich meine Frage nicht gestellt, oder?

Gock
25.09.2007, 20:01
Ja sorry. Der Fehler liegt so nah, dass er schon wieder fern ist.
Gruß

Hubert.G
25.09.2007, 20:06
Ich habe dir gleich in meiner ersten Antwort geschrieben das du die LED nach +5V geschalten hast und war eigentlich der Meinung das damit alles klar ist und es damit auch nicht weiter verfolgt. Aber mach dir nichts draus, du wirst noch über mehr Dinge stolpern und dich anschließend hinten hineinbeissen.

Gock
25.09.2007, 20:27
@Hubert.G
Kurze Sätze vereinfachen das Verständnis nicht immer...
Gruß

Hubert.G
25.09.2007, 20:37
@Gock
Da hast du Recht, ich habe wohl wieder einmal zuviel vorausgesetzt.

Hubert

jawo3
25.09.2007, 20:39
Da hast du Recht, ich habe wohl wieder einmal zuviel vorausgesetzt.
Egal, hauptsache es geht jetzt alles und ich hab´s verstanden. :wink:

Ich markiere den Thread mal als gelöst...

vklaffehn
25.09.2007, 21:45
Moin!
So als kleine Merkhilfe : du schaltest nicht +5V und 0V auf dem Pin, sondern Vcc und GND, dann ergibt sich quasi automatisch, daß eine LED, die vom PIN zu Vcc geschaltet ist, nicht leuchtet, wenn der Pin auch Vcc ist, da ja dann keine Spannungsdifferenz. So merk ich mir das.

MfG Volker

oberallgeier
26.09.2007, 10:10
Hi, jawo3,


Ich markiere den Thread mal als gelöst...

... wie geht denn das? Gbts dazu einen button oder so? So eine Funktion hatte ich schon mal heftig gesucht.

jawo3
26.09.2007, 11:54
So als kleine Merkhilfe : du schaltest nicht +5V und 0V auf dem Pin, sondern Vcc und GND, dann ergibt sich quasi automatisch, daß eine LED, die vom PIN zu Vcc geschaltet ist, nicht leuchtet, wenn der Pin auch Vcc ist, da ja dann keine Spannungsdifferenz. So merk ich mir das.
Ja danke, werde ich mir merken.



wie geht denn das? Gbts dazu einen button oder so? So eine Funktion hatte ich schon mal heftig gesucht.
Damit meinte ich eigentlich nur, dass ich ein [gelöst] in den Threadtitel eingefügt habe.

Aber das mit einer Art Button ist eine gute Idee...

Ich werde das Thema mal in einem anderen Unterforum ansprechen...