Forum: Mikrocontroller und Digitale Elektronik Atmega PC (DDRC) macht Probleme


von Stephan M. (Gast)


Lesenswert?

Hallo
Ich habe das Problem, das wenn ich PC (DDRC=0x00) auf eingang schalte, 
das irgendwelche zufällige Werte zurückgegeben werden.
1
DDRC = 0x00;
2
DDRB = =0xFF;
3
eingabe = PINC,
4
if (eingabe != 0){
5
  PORTB = eingabe;
6
}
an PORTB sind 8 LED´s angeschlossen so das man also sehen kann was für 
ein wert in der Variable eingabe ist
versorge ich nun das ganze mit Strom leuchten zufällig led´s
wenn an der Platine gewackeld wird leuchten andere LED´s bzw wenn beim 
Atmega8 einer der C Pins berührt wird

nehme ich aber anstelle von DDRC DDRD dan klapt es so wie es soll es 
scheint an den C Pins zu liegen mit den D Pins ist alles so wie es sein 
soll
Ich habe jetzt auch schon ein 2ten neuen Atmega8 zum testen genommen das 
selbe Problem
was mache ich falsch?

ich habe bei den C Pins sogar schon die verbindung mit den Tastern 
getrennt also es ist nicht mal was an den C Pins angeschlossen

von Jan S. (jan_s)


Lesenswert?

Hast Du mal die Pull-Ups eingeschaltet?
Also z.B. PORTC=0xCC

> DDRB = =0xFF;
Sieht irgendwie merkwürdig aus mit zwei "=". ;-)

von Stephan M. (Gast)


Lesenswert?

Soll nur ein = sein
Probiere dein Vorschlag mit 0xCC gleich mal aus :-)
Bin noch neu auf den gebiet was ist mit Pull-Ups gemeint?

von Jan S. (jan_s)


Lesenswert?

Äh Sorry 0xFF, Tippfehler.

von Jan S. (jan_s)


Lesenswert?

Stephan M. schrieb:
> Bin noch neu auf den gebiet was ist mit Pull-Ups gemeint?
Ein Eingangsport muss auf einen definierten Zustand gezogen werden, also 
ebtweder ca. 0V oder ca. 5V. Ein Pull-Up Widerstand zieht den Pin auf 
5V, ein Taster muss dann gegen Masse schalten um den Pin auf 0V zu 
bringen.

Ansonsten wirf bitte mal einen Blick ins AVR-Tutorial. Da stehen noch 
ein paar Grundlagen mehr drinne, die Dir ja anscheinend fehlen.

von Stephan M. (Gast)


Lesenswert?

Ahh jetzt weis ich was du meinst im Tutoral war ein Zeichnung dazu :-)
Bei der Zeichnung war aber keine angabe wie viel Ohm der Wiederstand 
haben
edit: ok im Text steht 10 KOhm

Zu den 0xFF dann wären doch alle Pins als Ausgang geschaltet 0x00 sollen 
laut Tutorial als Eingag schalten?

von Jan S. (jan_s)


Lesenswert?

Stephan M. schrieb:
> Zu den 0xFF dann wären doch alle Pins als Ausgang geschaltet 0x00 sollen
> laut Tutorial als Eingag schalten?

PORTC  != DDRC ;-)
Wenn über eine 0 im  DDR Register ein Pin als Eingang geschaltet ist, 
dann kann man mit einer "1" im PORT Register den Pull-Up einschalten.

von Stephan M. (Gast)


Lesenswert?

Ohh ups da habe ich wohl noch gepennt^^
Ok ich werde mir schnell noch was zu essen besorgen dann werde ich so 
wie im Tutorial 
(http://www.mikrocontroller.net/articles/Datei:Active_High.gif) gezeigt 
die Wiederstände anbringen

das habe ich leider noch nicht :-( habe ich irgendwie verdrängt denke 
mal das das mit der fehler sein wird
Bei PIND funkioniert es warscheinlich weil die LED´s als 
"Ersatzwiederstand" dienen nur bei PINC sind halt keine dranne

ich melde mich dann wenn ich soweit bin schonmal ein großes DANKE :-)

von Stephan M. (Gast)


Lesenswert?

Ok Es funktioniert :-)
Es waren die fehlenden Wiederstände die die Pins mit GND verbinden.
Die habe ich im Eifer des Gefechts irgendwie verdrängt :-(
Das Thema mit den Pull-Up wiederständen war es :-)
Wenn ich das mit den Externen wiederständen mache mit den bild was ich 
oben Verlinkt habe klapt es so wie es soll
nutze ich die internen Wiederstände ist es Invertiert sehe ich das 
richtig?
da es dann der Schaltung entspricht 
http://www.mikrocontroller.net/articles/Datei:Active_Low.gif?
mit den Externen wiederständen hatte ich 
http://www.mikrocontroller.net/articles/Datei:Active_High.gif
danke danke danke :-) der Tag ist gerettet :-)

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
Noch kein Account? Hier anmelden.