Forum: Mikrocontroller und Digitale Elektronik Komisches Interpretieren der Ausgänge


von Moritz M. (Gast)


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

von Guru (Gast)


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.

von Juergen G. (jup)


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

von Moritz M. (Gast)


Lesenswert?

Ok, schonmal danke für die zügige Antwort!

Aber wie setzte ich den Ausgang auf 0?
Mir ist bis jetzt kein Befehl aufgefallen der das kann.

lg

von Juergen G. (jup)


Lesenswert?


von Lehrmann M. (ubimbo)


Lesenswert?

Moritz M. schrieb:
> Aber wie setzte ich den Ausgang auf 0?

Juergen G. schrieb:
> Dann musst Du die Pins noch mit
>
> PORTC = 0xFF oder PORTC = 0x00
                    ^^^^^^^^^^^^

von Hunt W. (hunt_work_er)


Lesenswert?

ich tippe auf ein STK500

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.