Hallo liebe Mikrocontroller Gemeinde, ich habe folgendes Problem: ein Ringpuffer soll 40 ADC Werte speichern und anschließend wieder ausgeben. Verwendete µC ist ein ATMEGA16 programmiert in c. Zur Ausgabe der Werte verwende ich ein USB Monitor Tool. Probleme habe ich nur, die ADC Werde in den Ringpuffer zu bringen und auch wieder heraus. Hier mein bisheriger Code:
1 | int main(void) |
2 | {
|
3 | char line[101]; |
4 | init (); |
5 | DDRC=0xFF; |
6 | usbInit(); // init USB stack |
7 | sei(); // set enable interrupt on |
8 | for(;;) // the main event loop |
9 | {
|
10 | static unsigned char ringbuffer[ 256 ]; |
11 | static unsigned short getindex = 0; |
12 | static unsigned short putindex = 0; |
13 | static unsigned short buffersize = 20; |
14 | |
15 | int putring( int uin ) |
16 | {
|
17 | //if ( buffersize >= sizeof ringbuffer )
|
18 | // return -1;
|
19 | |
20 | uin = read_ADC(5); |
21 | uin=uin; |
22 | |
23 | ringbuffer[ putindex ] = uin; |
24 | putindex++; |
25 | if ( putindex >= sizeof ringbuffer ) |
26 | putindex = 0; |
27 | buffersize++; |
28 | return 0; |
29 | }
|
30 | |
31 | int getring( void ) |
32 | {
|
33 | //if ( !buffersize )
|
34 | // return -1;
|
35 | {
|
36 | buffersize--; |
37 | c = ringbuffer[ getindex ]; |
38 | getindex++; |
39 | if ( getindex >= sizeof ringbuffer ) |
40 | getindex = 0; |
41 | return c; |
42 | }
|
43 | }
|
44 | |
45 | PORTC = uin; |
46 | sprintf(line,"Wert = %4d \n", c); |
47 | outprint(line); |
48 | }
|
49 | return 0; |
50 | }
|
Nochmals zur Verständlichkeit: Die ADC Wandlung an sich funktioniert. Ohne den Ringpuffer kann ich die ADC Werte wunderbar über USB anzeigen lassen. Nur in Zusammenspiel mit dem Ringpuffer klappts nicht. Danke für eure Hilfe!! MfG