Hallo
Habe ein Atmega 32 und möchte ein Eingang am PortA Pin 2 abfragen.
An PortA Pin0 ist eine Led angeschlossen.
Beim tasten des Taster soll die Led leuchten. Wäre erfreut über ein
Lösungsvorschlag
Hier mein Programm
int main(void)
{
DDRA = 0x01 << PA0; //PortA Pin 0 wird als Ausgang gesetzt
DDRA &= ~(1 << DDA2); //PortA Pin 2 wird als Einagng gesetzt
PORTA |= (1<<PA2) ;
while(1)
{
;
if (PA2 == 1)
{
PORTA |= 1<<PA0;
}
else
{
PORTA &= ~(1<<PA0);
}
werner1 schrieb: > Beim tasten des Taster soll die Led leuchten. Wäre erfreut über ein > Lösungsvorschlag Probier einfach, dein Programmablauf im Simulator laufen zu lassen. Dann kannst du bei jedem Schritt verfolgen, was in den Registern passiert.
werner1 schrieb: > if (PA2 == 1) "PA2" ist nur eine vordefinierte Konstante und enthält den Wert 2. Der Vergleich ist also immer false. Was Du erreichen willst, bekommst Du z. B. so:
1 | if (!(PINA&(1<<PA2))) |
Dabei bin ich davon ausgegangen, dass der erwähnte Taster beim Betätigen den Eingang gegen GND zieht, also dass am Portpin beim Betätigen "0" gelesen wird, und dass die LED ebenfalls zwischen Portpin und GND liegt (und hoffentlich mit einem passenden Vorwiderstand). Übrigens fehlen noch zwei schließende geschweifte Klammern am Ende.
Danke Edi R. Jetzt klappt es. Wenn ich den Taster nach VCC ziehe muss ich dann das ! weglassen ?
Ja, aber dann brauchst Du einen externen Pull-Down. Den internen Pull-Up kannst Du dann abschalten.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.