Forum: Mikrocontroller und Digitale Elektronik AVR Atmega644 Anfängerfrage


von Felix (Gast)


Lesenswert?

Was genau läuft hier nicht? Zur Erklärung:
Auf PC1 liegt ein Button. Der Button sollte für die Zeit die er gerückt 
ist eine LED zum blinken bringen. Das Blinken ohne Button funktioniert 
scheinbar einwandfrei ausschließlich das auslesen nicht.

1
DDRA |= (1 << PA0);
2
DDRC &= ~(1 << PC1);
3
PORTC &= ~(1 << PC1);
4
while(1)
5
{
6
  if((PINC & (1 << PC1))){
7
    PORTA |= (1 << PA0);
8
    //tracking();
9
    _delay_ms(250);
10
    PORTA &= ~(1 << PA0);
11
    _delay_ms(250);
12
  }
13
}

von spess53 (Gast)


Lesenswert?

Hi

>Auf PC1 liegt ein Button.

Liegt er da so rum, oder ist er auch irgendwie angeschlossen? Wenn ja, 
wie?

MfG Spess

von Felix (Gast)


Lesenswert?

Das ding ist der ATmega läuft über das Uninetzwerk und ich verbinde mich 
per Remotedesktop mit einem PC an dem der ATmega angeschlossen ist. Eine 
Kamera zeigt mir dann die Anschlüsse etc. Allerdings sollte es am 
Anschluss nicht liegen da Assistenten das Ding angeschlossen haben und 
ich denke die haben genug Fachwissen um das zu schaffen ^^.


Deshalb muss es am Code liegen... aber der scheint soweit richtig oder 
nicht?

von Karl H. (kbuchegg)


Lesenswert?

Felix schrieb:


> Deshalb muss es am Code liegen... aber der scheint soweit richtig oder
> nicht?

Nicht unbedingt.

Meistens werden Taster so angeschlossen, dass sie im nicht gedrückten 
Zustand eine 1 am Portpin liefern und wenn der Taster gedrückt wird eine 
0.
Der Grund dafür ist ganz einfach der, dass man dann ein externes Bauteil 
einspart - einen ansonsten notwendigen Pulldown Widerstand.
So aber kann man den im AVR eingebauten Pullup Widerstand benutzen.

Nur

Dazu müsste der auch eingeschaltet werden ...
1
PORTC &= ~(1 << PC1);
... was er jetzt aber nicht ist, und die Abfrage ....
1
  if((PINC & (1 << PC1))){
... würde dann genau anders herum lautet (weil ein gedrückter Taster 
dann ja eine 0 liefert).

Daher die Frage wie er tatsächlich angeschlossen ist. Hat dein Assistent 
die übliche Anbindung vorgenommen oder hat er sich eine Extrawurst 
gebraten?

Passieren kann allerdings nicht viel, wenn wir einfach mal annehmen dass 
dein Assisten den Taster so an den AVR angeschlossen hat, wie das die 
ganze restliche Welt auch macht und wir einfach mal auf Verdacht das 
Programm ändern
1
DDRA |= (1 << PA0);
2
DDRC &= ~(1 << PC1);
3
PORTC |= (1 << PC1);  // Pullup ein
4
5
while(1)
6
{
7
  if( ! (PINC & (1 << PC1))){     // Taster gedrückt - Bit nicht gesetzt
8
    PORTA |= (1 << PA0);
9
    //tracking();
10
    _delay_ms(250);
11
    PORTA &= ~(1 << PA0);
12
    _delay_ms(250);
13
  }
14
}

: Bearbeitet durch User
von Felix M. (nemesisflx)


Lesenswert?

Danke für die schnelle Antwort so wurde das Problem behoben :)

von Arndt (Gast)


Lesenswert?

Felix schrieb:
> Das ding ist der ATmega läuft über das Uninetzwerk und ich verbinde mich
> per Remotedesktop mit einem PC an dem der ATmega angeschlossen ist. Eine
> Kamera zeigt mir dann die Anschlüsse etc.

Irgendwie muss ich da schmunzeln, wenn ich das lese ;>)

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.