@ Ralf
Bei mir leider nicht ich weis nicht woran es liegt.
Aber die andere Version funktioniert ja jetzt.
Jetzt habe ich aber das Problem das der Messwert einfach nicht stimmt
und der COntroller nur Müll ruaswirft.
Ich warte auf die Flanke an dem Pin und starte darauf hin den 8 Bit
Timer. Wenn die nächste Flanke kommt Stoppe ich den wieder und werte den
Gesamten Timerstand aus. Das passt aber garnicht die Wert im
Hyperterminal springne hin und er und sind nicht stabil. Hier mal der
Code bitte macht mich nicht fertig man das so nicht macht ^^ bin noch
relativer Anfänger.
1 | int main(void)
|
2 | {
|
3 | reg_init(); //Initialisierung von den Registern
|
4 | port_config(); //Ports konfigurieren
|
5 | sei(); //Globale Interrupt Enable
|
6 | char string[10]="0";
|
7 |
|
8 |
|
9 | while(1)
|
10 | {
|
11 | TCNT0=0;
|
12 | T0OF=0;
|
13 | freq=0;
|
14 | _delay_ms(1000);
|
15 | while(PINA>0);
|
16 | while(PINA==0);
|
17 |
|
18 | TCCR0=0x01;//Timer mit CPU Takt starten
|
19 |
|
20 | while(PINA>0);
|
21 | while(PINA==0);
|
22 | TCCR0=0x00;//Timer stoppen
|
23 |
|
24 | T0OF=T0OF*255;
|
25 | T0OF=T0OF+TCNT0;
|
26 |
|
27 | freq=16E6/T0OF;
|
28 |
|
29 | zt=freq/10000;
|
30 | freq=freq%10000;
|
31 |
|
32 | t=freq/1000;
|
33 | freq=freq%1000;
|
34 |
|
35 | h=freq/100;
|
36 | freq=freq%100;
|
37 |
|
38 | z=freq/10;
|
39 | freq=freq%10;
|
40 |
|
41 | e=freq;
|
42 |
|
43 | /*Anpassung an die ASCII Tabelle*/
|
44 | zt=zt+0x30;
|
45 | t=t+0x30;
|
46 | h=h+0x30;
|
47 | z=z+0x30;
|
48 | e=e+0x30;
|
49 |
|
50 | /*Werte in einen String schreiben*/
|
51 | string[0]=zt;
|
52 | string[1]=t;
|
53 | string[2]=h;
|
54 | string[3]=z;
|
55 | string[4]=e;
|
56 | string[5]=' ';
|
57 | string[6]='H';
|
58 | string[7]='z';
|
59 | string[8]=0x0A;;
|
60 | string[9]=0x0D;
|
61 |
|
62 | /*Stringlaenge auslesen und String senden*/
|
63 | stringlaenge=sizeof(string);
|
64 | string_senden(string);
|
65 |
|
66 |
|
67 | }
|
68 |
|
69 | return 0;
|
70 | }
|
Das Senden des Strings funktioniert. Das benutze ich auch schon seit ein
paar Programmen.
Meine Frequenzmessung muss nicht auf 1 Hz genau sein. 10 Hz würden
locker reichen.
Wie gesagt die Erfassung ist warscheinlich totaler Müll mir ist aber in
dem Moment nix besseres eingefallen.