Komisches Interpretieren der Ausgänge

Gast #2155854
Lesenswert?

Moin moin,
Ich komme mit meinem Atmega8515L nicht ganz klar!
Wenn ich diesen Code benutze:
1
//Wenn ich den Taster drücke soll die Variable cou
2
//hochzählen und die Zahl Binär anzeigen
3
char cou;
4
if (1<<taster)
5
  {
6
  cou++;
7
  PORTC=cou;
8
  _delay_ms(200);
9
  }

Dann wird der Inhalt der If-Anwendung nur ausgeführt wenn ich meinen 
Taster NICHT betätige.

Außerdem würde ich gerne PortC als Ausgang benutzen.
Dafür benutze ich diesen Befehl:
1
DDRC = 0b11111111;

Aber durch diesen Befehl fangen alle LED´s an zu leuchten!
Ist das normal?

lg
Gast #2155875
Lesenswert?

Leider kennen wir Deine Hardware nicht, aber es ist nicht ungewöhnlich, 
das Taster so angeschlossen sind, das sie nach Masse schliessen. D.h. im 
geöffneten Zustand sieht der uC am EIngang ein High (eine 1) in im 
geschlossenen ein Low (eine 0).

Was Dein zweites Problem angeht, müsste man mal die Initialisierung des 
Ports sehen. Ich bin auch zu Faul im Datenblatt nachzuschauen, wie die 
Port-Ausgänge nach dem Reset gesetzt sind. Ich gehe aber davon aus, das 
sie auf Null stehen. Das setzen der Port Richtung allein, bringt die 
LEDs dann nicht zum leuchten, aber das setzen der Port Richtung _in 
Verbindung mit_ einem auf 0 stehenden Port-Ausgang tut das. Auch die 
Gültigkeit dieser Antwort hängt von Deiner konkreten Hardware ab. Lies 
am besten mal die Dokumentation zur Hardware und insbesondere die 
Schaltung der Taster und LEDs.
#2155878
Lesenswert?

[Klugscheissmodus an]

schau Dir mal das AVR-gcc Tutorial hier im Forum an, und versuch die 
dort aufgefuehrten Schreibweisen zu verstehen und Dich daran zu 
gewoehnen, dann wirst Du hier im Forum mehr Freunde finden.

[Klugscheissmodus aus]


was immer taster auch ist,

if (1<<taster) ist immer TRUE


>DDRC = 0b11111111;
>
>Aber durch diesen Befehl fangen alle LED´s an zu leuchten!
>Ist das normal?

Das kommt drauf an wie Deine LED angeschlossen sind.

DDRC = 0b11111111; setzt PORTC als Ausgaenge, das ist richtig.

Jetzt die Frage, sind Deine LED High oder Low aktive?

Dann musst Du die Pins noch mit

PORTC = 0xFF oder PORTC = 0x00

setzen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren