-         

+ Antworten
Ergebnis 1 bis 8 von 8

Thema: Counter extern zählen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.05.2004
    Ort
    Untermerzbach
    Alter
    42
    Beiträge
    33

    Counter extern zählen

    Anzeige

    GearBest Black Friday Verbraucherelektronik Promotion
    Hallo,

    ich möchte bei einem Atmega8 den Counter extern über einen Taster
    (aktive Low) zählen lassen und den Wert am Ausgang als Bitmuster anzeigen lassen.
    Wie übergebe ich die Flanke des Tasters an T0 und wie vermeide ich Tastenprellung.
    Hat jemand einen Vorschlag. Dürfte ja nicht so tragisch sein. (Für mich schon)

    Über Codes, die verschiedene Funktion des Timer/Counter verdeutlichen würde ich mich auch freuen.
    Im Downloadbereich habe ich nichts passendes gefunden/übersehen.

    Danke
    memby

  2. #2
    Gast
    hab ichs richtig verstanden, was du vorhast...du willst einen Taster an einen AVR anschließen und immer, wenn du auf den Taster drückst, wird eine Zählvariable um 1 erhöht und diese Variable wird an einem Port ausgegeben?

    falls ja, würde ich den Taster an einen externen Interrupt anschließen(INT0, oder INT1 üblicherweise), der Schaltplan dazu ist im Tutorial auf www.mikrocontroller.net zu sehen, nur als Anschlusspin muss man eben einen interruptfähigen nehmen
    und dann wird, wenn dieser Interrupt ausgelöst wird, die Variable um 1 erhöht

    mit dem Entprellen kenn ich mich nicht aus, such mal danach

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.11.2004
    Ort
    Karlsruhe
    Beiträge
    223
    du könntest zum entprellen einfach in deinem Programm darauf warten dass der Signalpegel vom Taster eine bestimmt Zeit lang anliegt -- eine Hand ist nun mal deutlich langsamer wie ein Prellsignal

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    08.05.2004
    Ort
    Untermerzbach
    Alter
    42
    Beiträge
    33
    Danke für die Antworten.
    Doch mit Interrupt kenne ich mich noch nicht aus. Im Tutorial steht auch nur der Assemblercode.
    Kann jemand einen Beispielcode posten, der das Interruptthema und das Warten auf ein Signal an Hand eines C-codes erklärt.

    So eben bin ich auf eine andere Idee gekommen.
    Könnte ich die ganze Sache nicht einfach mit einem Inkrement lösen. Bei jedem Tastendruck eine Variable um eins erhöhen und einfach an einem Port ausgeben? Soweit die Theorie. Wie sieht das ganze in C aus.

    Ich komme von der SPS-Schiene und da is alles ein wenig einfacher (für mich) und möchte aber gerne auch C verstehen und programmieren.

    Danke
    memby

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    32
    Beiträge
    614
    So eben bin ich auf eine andere Idee gekommen.
    Könnte ich die ganze Sache nicht einfach mit einem Inkrement lösen. Bei jedem Tastendruck eine Variable um eins erhöhen und einfach an einem Port ausgeben? Soweit die Theorie. Wie sieht das ganze in C aus.
    Klar kannst du das machen. Hier ist mal der Code einer "Uhr". Das Programm verwendet einerseits einen Timer-Interrupt um eine Variable hochzuzählen und überprüft andererseits zwei Taster und einen Schalter, mit denen man die Uhr stellen kann.
    Code:
    #define __AVR_ATmega8
    #include <inttypes.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    #include <avr/delay.h>
    
    volatile uint8_t zeitZaehl, second, minute, hour;
    
    void ioinit (void) 
    {
        /*Ports*/
        DDRB = 0;
    	DDRD = 2; //alles bis auf TX auf Ausgang
    	PORTD = 28; //Pullups an PD2-4 an
    	
    	/*Timer2 - Prescale 64*/
    	ASSR=BV(AS2); //externen Uhrenquarz verwenden
    	TCCR2=1; //kein Prescale
    	TIMSK=BV(TOIE2); //Interupt an
    
    	sei (); /*Interrupts an*/
    	hour=17;minute=52;
    }
    
    int main (void)
    {
        ioinit ();
        
        for (;;) /* Endlosschleife */
           {;}
    
        return (0);
    }
    
    SIGNAL (SIG_OVERFLOW2)
    {
    if (++zeitZaehl>127){
    	zeitZaehl=0;
    	if (++second>59)
    	   {
    	   second=0;
    	   if (++minute>59)
    	      {
    		  minute=0;
    		  if (++hour>23)
    		     {
    			 hour=0;
    		     }
    	      }
    	   }
    	if (!(PIND&4))
    	   {
    	   if (PIND&16) {if (++hour>23) hour=0;}
    	   else if (++minute>59) minute=0;
    	   }
    	if (!(PIND&8))
    	   {
    	   if (PIND&16) {if (--hour>200)hour=23;}
    	   else if (--minute>200)minute=59;
    	   }
    	}
    }
    Wenn du Fragen zu einzelnen Codestellen hast, nur zu!
    it works best if you plug it (aus leidvoller Erfahrung)

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    32
    Beiträge
    614
    folgender Fehler taucht bei mir sporadisch(ca. jedes 50ste mal) beim Aufrufen von Threads auf, deshalb auch eben die "Doppelpost". Geht das sonst noch wem so? Woran mag es liegen?



    Die XML-Seite kann nicht angezeigt werden
    Die XML-Eingabe kann nicht angezeigt werden, wenn Stylesheet XSL verwendet wird. Beheben Sie den Fehler und klicken Sie dann auf Aktualisieren, oder wiederholen Sie den Vorgang später.


    --------------------------------------------------------------------------------

    Das Endtag 'script' stimmt nicht mit dem Starttag 'SCRIPT' überein. Fehler beim Bearbeiten der Ressource 'http://www.roboternetz.de/phpBB2/posting.php'. Zeile 59, Position 3

    </script>
    it works best if you plug it (aus leidvoller Erfahrung)

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    29
    Beiträge
    674
    der Gast war ich

    Könnte ich die ganze Sache nicht einfach mit einem Inkrement lösen. Bei jedem Tastendruck eine Variable um eins erhöhen und einfach an einem Port ausgeben?
    hab ich doch gesagt...
    und immer, wenn du auf den Taster drückst, wird eine Zählvariable um 1 erhöht und diese Variable wird an einem Port ausgegeben?

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    08.05.2004
    Ort
    Untermerzbach
    Alter
    42
    Beiträge
    33
    Danke für euere Anregungen. Ich werde mich leider erst am Wochenende drüber machen können. Melde mich aber bei Fragen.
    MfG Stefan

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •