Hallo. Kann man bei 4MHz ähnlich einfach einen Sekunden-Interrupt ableiten, wie bei 4,096MHz. Beispielsweise mit einem AT90S4433 in Assembler? ciao Dirk
Benutze Timer1(16Bit): Vorteiler auf 256 stellen(nur der vorteiler ergibt gerade Sekunden!!!) Dann den Compare Match auf 15625 setzen. Dann bei compare Match Zähler löschen und Interrupt auslösen ==> jede sekunde wird ein Interrupt ausgelöst. So gehts in groben Zügen. Für weiter hilfe solltest du deinen Code posten! Gruß, Florian
Danke nochmal für den Hinweis. Ich habe noch ein bisschen gesurft was ich mit welchen Registern machen muss, etwas gelesen und angepasst. Es funktioniert. Tolles Gefühl, jetzt geht es weiter.
Hallo Ich habe da auch mal eine Frage zu diesem komischen Compare-Register. @Florian Du hast den Compare Match auf 15625 gestellt. Das Zählregister beginnt aber bei 0 zum Zählen und nicht bei 1. Sind das jetzt 15625-Schritte bis er überläuft oder 15626-Schritte? Martin
Hallo! Ich habe mal ein kleines Programm erstellt und dieses im AVR-Studio getestet. Ich habe den 16-Bit Timer des 2313 auf folgende Weise initialisiert. Taktteiler 8 Compare ein. Ausgang wechseln Compare-Register auf 3 Zählregister auf 0 Also man kann erkennen, wenn man 8mal auf Step into klickt, dass der Timer um eins vorwärts zählt. Also von 0 auf 1. Danach klickt man wieder 8mal weiter. Der Timer springt auf 2. Danach wieder 8mal. Der Timer springt auf 3. Danach wieder 8mal. Der Timer springt auf 0 und der Ausgang wird beim nächsten Klick gewechselt. Dies bedeutet, dass der Timer erst nach 4Zyklen *8(Teiler) wieder auf 0 landet und nicht bei 3. @Florian Aus diesem Grund musst du anscheinend das Register auf 15624 initialisieren, damit du 15625 Schritte erhältst. Korrigiert mich bitte, wenn ich mich irre. Martin PS: Das Programm Chip type : AT90S2313 Clock frequency : 10,000000 MHz Memory model : Tiny External SRAM size : 0 Data Stack size : 32 *********************************************/ #include <90s2313.h> // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func0=In Func1=In Func2=In Func3=Out Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=0 State4=T State5=T State6=T State7=T PORTB=0x00; DDRB=0x08; // Port D initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 1250,000 kHz // Mode: CTC top=OCR1A // OC1 output: Toggle // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x40; TCCR1B=0x0A; TCNT1H=0x00; TCNT1L=0x00; OCR1H=0x00; OCR1L=0x03; // External Interrupt(s) initialization // INT0: Off // INT1: Off GIMSK=0x00; MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off ACSR=0x80; while (1) { // Place your code here #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); #asm("NOP"); }; }
Das mag schon sein - habe mich noch nicht darüber gedanken gemacht, denn ich brauchte nur einen annähernd genauen Sekundentakt. (Keine Uhr) Trotzdem Danke für den Hinweis! Gruß, Florian
Hallo, habs gerade ausprobiert - stimmt schon, Compare Match muss auf 15624 gesetzt werden. Wenn ich den angehängten Code im AVR Studio laufen lasse, so wird die Interrupt-Routiene exakt alle 4000000 taktzyklen ausgeführt, also bei 4Mhz jede Sekunde! Danke für die Info, Florian
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.