Hallo Zusammen Will ein Programm schreiben welches jede milisekunde die Ausgänge anders ansteuert. An den Ausgängen sind LED . Die Daten nehme ich aus einem Array. Hier der code:
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | #include <array.h> |
4 | |
5 | #define F_CPU 8000000UL
|
6 | |
7 | int zeile = 0; |
8 | |
9 | int main() |
10 | {
|
11 | DDRA = 0b11111111; //ausgang definieren |
12 | //Timer________________________________________________________________________________
|
13 | TIMSK |= (1 << TOIE0); //Timer 0 mit "Overflow Itterrupt" aktivieren |
14 | TCCR0 =(1<<CS00) | (1<<CS02); //Prescaler auf 1024 stellen |
15 | OCR0=156; //Timer vorladen |
16 | |
17 | //Frequenz des Timers = 8000000 / 1024 / (256-156) = 1000 Hz
|
18 | //_____________________________________________________________________________________
|
19 | |
20 | while(1){ |
21 | |
22 | //Endlosschlaufe nötig?
|
23 | PORTA = 0b11111110; |
24 | }
|
25 | }
|
26 | |
27 | ISR (TIMER0_OVF_vect) |
28 | {
|
29 | // jede milisekunde (1000mal pro sec) wird die anzeige geändert
|
30 | |
31 | if(zeile == 10){ //Wenn array einmal durchlaufen, von vorne beginnen |
32 | zeile = 0; |
33 | }else{ |
34 | PORTA = bitmap[0][zeile]; //bitmap = array in array.h Bibliothek |
35 | //Hier würden weitere PORTS stehen vorerst zum testen ob stimmt nur PORTA
|
36 | zeile++; |
37 | }
|
38 | }
|
Beim Simulieren funktionierte es nicht wie erwünscht. Das Programm lief einmal durch und hörte auf. Die eingänge werden immer pro Interrupt ein und danach wieder ausgeschaltet. Schliesse ich den Ausgang B ans Osziloskop sehe ich eine Frequenz von 2MHz das mal 2 (da ich immer ein und aus schalte) = CPU Frequenz von 4MHz. Habe aber 8MHz Definiert!? Warum kommt da nicht ein signal von 1000Hz heraus? MfG Michael (Das ganze gibt keine Propeller Uhr aber der Hintergedanke ist der selbe!)