Gast
#4918412
Hallo, Ich habe mir einen Münzprüfer zugelegt und möchte diesen mit dem Microcontroller (ATmega 2560) ansteuern. Der Münzprüfer sendet für jede eingestellte Münze (in meinem Fall 50c, 1€ und 2€) eine unterschiedliche Pulsanzahl mit einer Pausenzeit von 100ms pro Puls aus. Dieses Pulse zähle ich per externen Interrupt. Um jetzt die eingeworfene Münze erkennen zu können, fasse ich die Pulse in "Blöcke" zusammen, damit ich erkennen kann, dass z.B zuerst eine 1€ Münze mit 10 Pulsen und dann eine 2€ Münze mit 20 Pulsen eingeworfen wurde. Dazu starte ich nach jeden Interrupt einen 16-bit Timer in der ISR des externen Interrupts mit einem Prescaler von 1024 (in diesem Fall testweise) um auf eine Laufzeit von 4.19s zu erhalten (Quarztakt vom µC sind 16MHz). Wenn ein externen Interrupt auftritt, bevor der Timer Overflow Interrupt ausgelöst wird, soll der Timer neugestartet werden. Wenn dann der letzte Puls aufgetreten ist, wird der Timer bis zum Overflow nicht mehr neugestartet und dann in der Timer Overflow ISR "beendet". Dabei wird auch ausgegeben welche Münze eingeworfen würde und der Zählstand zurückgesetzt. Ich habe den Code geschrieben und stehe vor dem Problem, dass der Timer direkt nach dem setzen der Register auslöst wird und in die Timer Overflow ISR geht. Der externe Interrupt und die Übertragung zum PC funktioniert einwandfrei. Benutzt habe ich AVR Studio 7.0 und programmiert habe ich in c. Ist dieses Vorgehen so wie ich es vorhabe machbar?
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 | |
