www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2-Bit Zähler rückwerts zählen lassen


Autor: Holzwurm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,
Ich habe mir bei Pollin das AVR-Board gehohlt und wollte den 2-Bit 
Zähler aus dem Pollin Tut zum Rückwerts zählen bringen.
Nun mein Problem
Wenn ich einen Taster drücke leuchten die Led´s wie sie wollen.
Im Anhang packe ich mal meinen code rein er ist in C.
Besten dan im vorraus für eure Hilfe
Euer Holzwurm

Autor: Holzwurm (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ach hier noch der Code

Autor: Klaus T. (gauchi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde mal vermuten, dass deine Tasten prellen -> Entprellung

Autor: Holzwurm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus T. schrieb:
> Ich würde mal vermuten, dass deine Tasten prellen -> Entprellung

ICh habe jetzt das Entprellen mit eingefügt aber es hat sich nicht 
verbessert wenn ich den Teil wegnehme wo Taster2 dazu kam dann läuft es 
problemlos.
ich bin Ratlos

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nur zur info, wenn du beide Signale invertierst dann zält er auch 
rückwärts...

Hannes

Autor: Klaus B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

an deinem Code fällt mir auf, daß du den Tasterzustand über das Register 
PINC abfrägst, in deiner Initialisierung aber DDRB konfigurierst. Dh. 
dein Input am Port C wird vermtl. "floaten" und deshalb irgendwelche 
Störsignale auffangen.

Sieh dir das mal an ...

Gruß

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define   F_CPU     1e6
#include <util/delay.h>
#include <avr/io.h>


// LEDs sind high-active geschaltet
#define LED_DDR         DDRD
#define LED_PORT        PORTD
#define LED1            PD5
#define LED2            PD6
#define LED3            PD7
 
// TASTER ist high-active geschaltet
#define TASTER1         PC0      //hoch
#define TASTER2         PC1
#define KEY_PIN         PINC


uint8_t key_state;                              // debounced key state:
                                                // bit = 1: key pressed
uint8_t key_press;                              // key press detect


void debounce( void )                           // about every 10ms
{
  static uint8_t ct0 = 0xFF, ct1 = 0xFF;        // 8 * 2bit counters
  uint8_t i;

  i = KEY_PIN;                                  // read keys (high active)
  i ^= key_state;                               // key changed ?
  ct0 = ~( ct0 & i );                           // reset or count ct0
  ct1 = ct0 ^ (ct1 & i);                        // reset or count ct1
  i &= ct0 & ct1;                               // count until roll over ?
  key_state ^= i;                               // then toggle debounced state
  key_press |= key_state & i;                   // 0->1: key press detect
}


uint8_t get_key_press( uint8_t key_mask )
{
  key_mask &= key_press;                        // read key(s)
  key_press ^= key_mask;                        // clear key(s)
  return key_mask;
}

 
void ausgabe(uint8_t wert)
{
  LED_PORT = wert << 5;                         // PD5, 6, 7
  LED_DDR = 1<<LED1 | 1<<LED2 | 1<<LED3;
}


int main(void) 
{
  uint8_t count = 0;

  for(;;){
     _delay_ms( 10 );                           // debounce time
     debounce();

     if( get_key_press( 1<<TASTER1 ))
       count++;
     if( get_key_press( 1<<TASTER2 ))
       count--;
     ausgabe( count );
  }
}


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.