Moin, ich möchte mit meinem Mega644p ein RC Summensignal auswerten. Dazu habe ich ein paar Fragen. Wie das aussieht und wie ich es auswerten möchte weiß ich bereits, nur bei der Umsetzung haperts noch. Das Summensignal geht immer von Steigender Flanke zu Steigender Flanke, das möchte ich mit einem Interrupt abfragen, aber was ist sinnvoller INT oder PCINT, bzw. wo genau ist der Unterschied? Die einzelnen Signal gehen von 1-2ms, ich brauche die Werte in angaben von 0-255, also müsste der Timer 255 mal pro ms einen Overflow Interrupt haben. Bei Steigender Flanke wird der Timer wieder zurück gesetzt. Dazu wollte ich ihn in einen 8-bit in den "Clear Timer on Compare Match" Modus stellen und einen Overflow bei 72 machen. (F_CPU / Teiler)/ 256 * 1000ms/sekunde). F_CPU = 18.432Mhz Teiler = 8 Habt ihr noch Tipps für mich? Das Programm von ulrich radig kenne ich bereits. MfG Philipp
Gast
#2365944
Kennst du Beitrag "Servo Summensignal auswerten"
Hi, @Krapao: Danke, kenn ich aber schon. ich habe jetzt versucht, mich nach dem Code von Thomas Pfeiffer zu richeten. http://thomaspfeifer.net/ppm2usb_adapter.htm Das Problem ist, dass bei start ein paar Messungen durchgeführt werden (die Anzahln varriiert, mal 6, mal 30 usw.) Die Werte sind da auch richtig. Doch dann gehts nich mehr weiter, der Mega hängt sich irgentwie auf oder so. Die Led, auf dem Board ist dann auch an, obwohl sie nur beim Initialiesieren an sein sollte, aber sie ist dunkler, also ob sie schnell ann und aus gemacht wird, oder weniger Spannung bekommt. Hier der Code: Main.c
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
ppm.h Den code habe ich fast komplett übernommen, nur ein paar Anpassungen gemacht, z.b. den Prescaler auf 64 gesetzt und die Register angepasst.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
ppm.c
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
Die Verkabelung scheint richtig zu sein, weil die paar Messungen bis zum Ausfhängen richtig sind, außerdem überprüfe ich das Signal laufend mitnem Oszi. Was könnte sein? Manchmal habe ich probleme mit der sei() Funktion, habe auch schon mehrere Positionen im code getestet, geht aber alles nicht. MfG Philipp
Gast
#2366541
> Die Led, auf dem Board ist dann auch an, obwohl sie nur > beim Initialiesieren an sein sollte, aber sie ist dunkler, also ob sie > schnell ann und aus gemacht wird Der AVR scheint sich im Fehlerfall laufend zu resetten. > UCSR0B |= (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0); ^^^^^^^^^^^ Da hast du einen Interrupt eingeschaltet für den ich keine ISR sehe. Wenn der Interrupt dann (bei genug Störungen am offenem Eingang UART0-RXD?) käme, würde das zu einem Reset führen. Soweit ich sehe wird UART0 von dir nicht benutzt. Lass den Teil in uart_init weg.
Ok vielen Dank, es geht. Ich hatte den USART0_RX_vect nur auskommentiert, weil ich ihn für den test mit der Hardware nicht brauchte, jetzt hab ich alles vom UART0 rausgenommen und es geht. MfG Philipp
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.