-         

Ergebnis 1 bis 10 von 10

Thema: 2-Timerprobleme kann ich nicht lösen(Attiny13 o.ä)

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1

    2-Timerprobleme kann ich nicht lösen(Attiny13 o.ä)

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Es ist bestimmt hier schon jede Menge über Timer in AVR geschrieben bzw diskutiert worden, aber irgendwie habe ich wieder das gewisse Brett vorm Kopf.
    Ich muss zugeben ich habe in dieser Sache noch nicht genug Erfahrung beim Programmieren in C (event. ASM o. Bascom(bevz)).

    Mein Problem ist folgendes, ich möchte eine kleine Sache mit einem Attiny 45 o.ä. jedenfalls einem 8-Füssler lösen.
    Natürlich nur, wenn möglich !
    Ich benötige 2 x Input 2x Output. ein Eingang zum Auslösen. ein Eingang zum Stoppen...ein Ausgang LED , ein Ausgang Speaker...

    Die Aufgabe besteht darin das wenn ein Eingang auf HIGH( oder auch LOW) geht soll der Speakerausgang für 30..60sec.(einstellbar) alle 2..3sec. einen Piepton ausgeben.
    Das soll aber auf vorzeitig auch zu Stoppen gehen.

    Kann mir wer helfen wie ich die Sache angehen kann, ein paar Codehinweise genügen, muss nicht Fertiges sein. Ich will ja dabei lernen und nicht nur "abkupfern"

    Gruss und Dank

    Gerhard
    Nachtrag: Natürlich mit Attiny45, denn der 13er hat nur einen Timer
    Geändert von oderlachs (15.02.2014 um 12:02 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    ein Timer würde sicher genügen.
    Den lässt du einfach im doppeltem Sound-Takt laufen.
    Im Hauptprogramm fragst du deine Eingänge ab und setzt die Ausgänge und, falls erforderlich, setzt du eine Variable mit der Anzahl Sound-Takte entsprechend der maximalen Dauer.
    Im Interrupt fragst du diese Variable ab und wenn sie größer Null ist, dann toggelst du den Sound-Ausgang und zählst eins runter.
    Gleichzeitig checkst du mit einer 2. Variable, ob grad deine 2..3sec vorbei sind und handelst entsprechend.

    Ein Tiny13 reicht dann nach meinem Gefühl, der hat ja 5 I/Os.

    Gruß, Michael

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Danke Michael !
    Ich grübel mir nun schon den Kopf wund, wie ich das mit dem Timing machen soll, ich sage ja ich bin da fast Neueinsteiger in Sachen Timer,PWm, Interruppt.
    Ich habe jetzt erst mal folgenden Code:
    Code:
    #include <avr/interrupt.h>
    #include <stdint.h>
    // ATTiny13
    // F_CPU 4800000Hz intern
    // PIN B4 = LED Ausgang
    // PIN B2 = LED Anzeige Überlauf Timer
    // PIN B3 INPUT  LOW oder HIGH
    volatile int timer_overflow_count = 0;
    uint8_t FLAG = 1;
    ISR(TIM0_OVF_vect)
     {
       if (++timer_overflow_count >18)
       //(4800000 /(255x1024x18)
        {  
          // Toggle Port B Pin 2 output status
          PORTB ^= 1<<PB2;     // LED blinkt in ca. 1sec. Abstand etwa...
         // FLAG != FLAG;
          timer_overflow_count = 0;
        }
    }
    
    int main(void) {
       // Set up Port B pin 2 mode to output
        DDRB = 1<<DDB2;
    
       // prescale timer to 1/1024th the clock rate 
       // = 4867.5 Hz bei 4,8MHz 
        TCCR0B |= (1<<CS02) | (1<<CS00);
       // prescale timer to 1/8th the clock rate
       //TCCR0B |= (1<<CS01);
    
       // enable timer overflow interrupt
       TIMSK0 |=1<<TOIE0;
       sei();
    
       while(1) {
    
          //  ISR handle the LED forever
       }
    }
    Damit habe ich etwas das Timing verstanden zu kapieren...nun müsste der Takt aber nicht 255 x ablaufen bis zum Überlauf, sondern nur noch 200. Gibt es nicht eine Methode, wo ich den Zähler schon auf 55 voreinstellen kann , so das nur noch 200 Takte bis zum Überlauf gebraucht werden ??
    Ich lesen das Datenblatt jetzt schon mehr mals rauf und runter , kann es nicht finden...
    Dies muss ich erst mal kapieren , ehe ich mich mit dem Weiteren befassen kann...

    Gruss und Dank

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    C ist mir zu kryptisch, das tu ich mir nicht an, ich mag lieber klare Sprachen wie Basic, Pascal oder Assembler
    Kannst du den Timer nicht beim Einsprung in den Interrupt auf den gewünschten Wert 56 setzen? Dann läuft er nur noch 200 Takte bis zum nächstem Überlauf.

    Gruß, Michael

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Danke Michael...
    Ich habe es schon geschafft nach dem Überlauf lade ich den TNTC0 mit 56 vor und schon geht das, wieder was dazu gelernt
    Code:
    // vorladen des Zählers
      TCNT0 =0x38;             // 56 dec.
    Nun muss ich mir noch ausdenken, wie ich Deinen Vorschlag realisiere, mit doppelter Soundfrequenz usw....

    Gruss und Dank
    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    schau mal ins datenblatt, du kannst den Timer im CTC modus laufen lassen, dann zählt er nur bis er den wert in OCR0A erreicht.

    Kapitel 11.7.2
    http://www.atmel.com/images/doc2535.pdf

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Danke Robin !

    ich habe gerade hier ein "Fachbuch" vom ATMega32 da wird so einiges von den Timern usw. beschrieben, an Hand dessen werde ich mich mal in die Timerprogrammierung "einwühlen"..
    Ja ich habe das Datenblatt vom ATTiny13 schon durchstöbert um einige Fakten zu erfahren, aber wie gesagt in Sachen Timer/PWM unter C oder Basic, ASM bin ich noch ein "Erstklässler"..

    Gruss und Dank

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied Avatar von derNeue
    Registriert seit
    01.01.2011
    Ort
    Bierstadt Radeberg
    Alter
    31
    Beiträge
    101
    Hallo Oderlachs!

    Vielleicht hilft dir der Link, ist mMn gut geschrieben.

    http://www.mikrocontroller.net/articles/FAQ#Timer


    Ist ansich gar nicht so schwer, mit den Timern.

    Mich wundert etwas, interner Quarz mit 4,8MHz? Sind die nicht immer genau 4MHz? Oder ist das beim Attiny13 anders?


    Dennis
    Ich studiere die Wirkung der Sonnenstrahlen auf das Liebesleben der Pflastersteine

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    ... Mich wundert ... interner Quarz mit 4,8MHz? ... nicht immer genau 4MHz? ... ist das beim Attiny13 ander2 ...
    Der tiny13 IST anders. Normalerweise hat der interne Oszillator (es ist KEIN interner Quarz) bei den Atmels 8 MHz, mit nem 1/8-tel Vorteiler im Lieferzustand werden das die sattsam bekannten 1 MHz - ohne Quarz, ohne Fuses, eben fabrikneu. Der Tiny hat seit jeher seinen internen Oszillator mit 9,6 MHz bzw 4,8 MHz, mit dem 8tel Vorteiler werden es 1,2 MHz. Der tiny13 hat aber mit einem zusätzlichen internen Oszillator zusätzlich noch die Möglichkeit mit dem Internal 128 kHz Oscillator extrem sparsamen zu takten - ohne zusätzliches Bauteil. Unabhängig davon kann er mit entsprechendem Quarz ab 2,7V mit bis zu 10 MHz und ab 4,5V mit bis zu 20 MHz getaktet werden. Ein pfiffiges Dingelchen !
    Geändert von oberallgeier (16.02.2014 um 18:22 Uhr)
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied Avatar von derNeue
    Registriert seit
    01.01.2011
    Ort
    Bierstadt Radeberg
    Alter
    31
    Beiträge
    101
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Der tiny13 IST anders.
    Ah, okay, speziell mit dem Attiny13 habe ich jetzt noch nix gemacht. Der kleinste bisher war der Attiny24, ansonsten nur Megas.


    Dennis
    Ich studiere die Wirkung der Sonnenstrahlen auf das Liebesleben der Pflastersteine

Ähnliche Themen

  1. Ich kann mich nicht entscheiden!
    Von Philsuro im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 2
    Letzter Beitrag: 21.10.2010, 13:41
  2. Antworten: 0
    Letzter Beitrag: 24.12.2009, 11:39
  3. Ich kann den ATmega168P nicht löschen
    Von sero_77 im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 11.12.2008, 16:31
  4. Antworten: 25
    Letzter Beitrag: 21.08.2008, 23:33
  5. ich kann meinen atmega32 nicht füttern
    Von niemalsaufgeben im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 09.12.2005, 13:56

Berechtigungen

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