PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : adc-interrupt setzen mit 2 ausgebewerten



pebisoft
29.08.2005, 13:50
wie kann man in der interruptroutine 2 adcwerte abfragen und in eine variable speichern. zur zeit frage ich "mux0" ab,ist der 2. adcpin.
und wie kann man zb pin8 abfragen da muss ja irgendwie mux0 und ein anderer mux.... als "or" hintereinander gesetzt werden.
so sieht es zb bei winabr-c aus: ADCchannel_8 ADMUX= _BV(MUX2) | _BV(MUX1) | _BV(MUX0)


$regfile = "m16def.dat"
$crystal = 8000000
$baud = 19200

Dim Adhi As Byte
Dim Adlow As Byte
Dim Adcergebnis As Word
Dim Radzaehler As Byte
Dim Toggle_rad As Byte

Disable Interrupts
Adcsra.aden = 1
Adcsra.adate = 1
Adcsra.adie = 1
Adcsra.adsc = 1
Adcsra.adps0 = 1
Adcsra.adps1 = 1
Adcsra.adps2 = 1
Admux.refs0 = 1
Enable Interrupts

Radzaehler = 0
Toggle_rad = 0

On Adc Onadc

Do

Waitms 1
Print Radzaehler

Loop

Onadc:
Admux.mux0 = 1
Adcsra.adsc = 1
Adlow = Adcl
Adhi = Adch
Adcergebnis = Adhi * 256
Adcergebnis = Adcergebnis + Adlow
If Adcergebnis > 400 And Toggle_rad = 1 Then
Incr Radzaehler
Toggle_rad = 0
End If
If Adcergebnis < 100 And Toggle_rad = 0 Then
Incr Radzaehler
Toggle_rad = 1
End If
Return

End


mfg pebisoft

PicNick
29.08.2005, 15:46
FÜr den Channel sind die untersten Bits zuständig. Am bequemsten ist es, alle drei zu löschen und dann einfach die Channel -Nummer (0-7) direkt reinzuschreiben:

admux = admux AND &HF8 ' löschen der untersten 3 bit
Und dann
admux = admux OR 0 ' Channel 0 oder
admux = admux OR 1 ' Channel 1 oder
admux = admux OR 2 ' Channel 2 oder
admux = admux OR 3 ' Channel 3 oder
admux = admux OR 4 ' Channel 4 oder
admux = admux OR 5 ' Channel 5 oder
admux = admux OR 6 ' Channel 6 oder
admux = admux OR 7 ' Channel 7

Das ganze in GCC
admux &= 0xF8 ' löschen der untersten 3 bit
admux |= 0 ' Channel 0 oder
admux |= 1 ' Channel 1 oder
...........
admux |= 7 ' Channel 7 oder

29.08.2005, 16:47
@Pebisoft: Bist aber noch recht aktiv hier für das, daß du Bascom angbl. verkauft hast, da du ja umsteigen wolltest (C ?)!

pebisoft
29.08.2005, 19:46
so aktiv nicht mehr, nachdem mir das updateforum so gestunken hat bin ich auf winavr-c umgestiegen (habe hier weiter unten im forum eine bösartige )schilderung abgegeben. versuch ein sram zum laufen zu bringen welches daten vom adc-port als interrupt bekommt. klappt in winavr-c noch nicht und suche erst eine lösung, habe mal ein bascombeispiel aus diesem forum reingestellt um die situation schildern zu können.
hallo picknick diese or-lösung läuft in winavr-c sehr gut .
mfg pebisoft