Hallo liebe Gemeinde,
bin nun auch dem avr´s verfallen :) (..mache grad nen e-techniker), tue
mich aber noch ein bissel schwer mit der programierung. c/c++
grundkennisse sind vorhanden.
ich versuch mich am stk500 mit nem atmega 8 (4mhz ext. quartz), atmega16
&8815 wären auch vorhanden.
ich versuche mich gerade am timer. hab dazu ein testprogramm geschrieben
(ja ich weis sollte besser über interupts geschehen, aber ich muss
erstmal den timer verstehen bevor ich mit interrupts beschäftige, von
daher verzeiht mir)
nun mein problem: der counter läuft nicht so wie ich gern möchte. er
sollte im sekundentakt auf einem lcd hochzählen. läuft aber viel zu
schnell (so mit gefühlen 1000hz - brauch also eine sekunde für nen
durchlauf) am lcd.
hier mein prog:
1 | #include <avr/io.h>
|
2 | #include <stdlib.h>
|
3 | #include "lcd-routines.h"
|
4 |
|
5 | unsigned char z;
|
6 | int s = 0;
|
7 | short a = 0;
|
8 |
|
9 |
|
10 | int main()
|
11 | {
|
12 |
|
13 | lcd_init(); // LCD init
|
14 |
|
15 | TCCR0 = (1<<CS01) | (1<<CS00); // Prescaler Timer0 auf 1024 setzn
|
16 |
|
17 | DDRB = 0x00; // Port B als Ausgang setzen
|
18 |
|
19 |
|
20 | do{
|
21 | do{
|
22 |
|
23 | do{
|
24 | z = TIFR; // Timer Counter Register auslesen
|
25 | z = z & 0x01; // Timer Interupt Flag (TOV0) mit Logisch 1 vergleichen
|
26 | }
|
27 |
|
28 | while (z == 0); // Schleife solange wie TOV0 nicht gesetzt (Logisch 0)
|
29 |
|
30 | s=s+1; // "s" um 1 erhöhen
|
31 | TIFR = (0<<TOV0); // Timer Interupt Flag (TOV0) zurücksetzen
|
32 | }
|
33 | while (s<15); // Schleife solange wie "s" < 15 (4Mhz/256/1024/15 sollte rund 1 Hz sein)
|
34 |
|
35 | s=0; // Schleifenzähler "s" zurücksetzen
|
36 | a=a+1; // Zähler für LCD Ausgabe um 1 erhöhen
|
37 |
|
38 | {
|
39 | char b[5]; // b definieren
|
40 | itoa( a, b, 10 ); // übergabe int a >> char b
|
41 | set_cursor (0,1); // cursor pos setzen
|
42 | lcd_string( b ); // Anzeige b
|
43 | }
|
44 | }
|
45 | while (a<1000); // bei LCD Anzeige 1000 beenden
|
46 |
|
47 | return 0;
|
48 | }
|
ich hab alles schön mit "remarks" meiner gedankengänge gefüllt. helft
mir bitte meine "irrungen" zu finden.
grüsse swen