AVR Atmega644 Anfängerfrage

Gast #4336466
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
}
Gast #4336500
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?
#4336559
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
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.