Hey Ich versuche mich gerade mal an den ADC um ihn zu verstehen. Habe hier einen Attiny13 und eine 4x3 Matrix die ich über ADDC einlese. Und über einen SW Uart ausgebe. Im Moment ist adc auf Interupt eingestellt und es kommen auch die passenden Werte am terminal an. Meine 1.Frage ist funktioniert das überhaupt. Interupt kommt --> lese WERT nach R1 --> dann lese ich den Wert nochmal ein um zu sehen ob er sich verändert hat. Eina Art sicherstellen das auch der richtige Wert kommt. Aber kann er sich zu dieser zeit überhaut ändern ?? 2. Frage Im Moment ist er im FreeRunning Mode. Dachte wenn ich nicht immer aktiv sein soll sondern nur wenn sich was am ADC Eingang (WERT) ändert muß ich ihn mit Interrup steuern. Aber er ist immer im Interupt (LED blinkt) Was muß ich machen damit er nur beim ändern des ADC Wertes in den Interupt geht. Danke vor erst mal Gruß Gerd
1 | intadc: |
2 | ;[STACK usw...] Hier macht die Int-Service-Routine irgendwas, benutzt Register R16 |
3 | getADC: in rKey,ADCH ; Lese AD-Wandler MSB |
4 | mov R1,rKey ; kopiere AD-Wandler-Wert nach R1 |
5 | |
6 | in R16,ADCH ; LADE ADC WERT für CP nach R16 |
7 | ldi temp,40 ; Für Entprellen lade ich 40 mnal sehen ob adc gleich ist |
8 | |
9 | |
10 | Entprell1: ; von temp ein abzeihen decrement |
11 | IN R24,ADCH ; Lade ADCh nochmal in Register rmp (R20) |
12 | CP R24,R16 ; Vergleiche die 2 Ergebinisse |
13 | BRNE getADC ;If Z set |
14 | dec temp |
15 | brne Entprell1 |
16 | sbi PORTB,REL1 ; Ausgang = aus ein |
17 | rcall GetKeyCode |
18 | |
19 | HIER SIND dann noch ein paar pausen unw erkennung des Wert aus der Tabelle übergabe an UART |
20 | |
21 | cbi PORTB,REL1 ; Ausgang = aus low |
22 | RETI |