AVR Atmega644 Anfängerfrage

Gast #4336466
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
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
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
}
Gast #4336774
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 ;>)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.