Che Guevara
30.07.2010, 21:14
Hallo Leute,
für eine "Musiklautstärke-8-Led-Anzeige" hab ich bei meinem Atmega32 den ADC auf Free-Run eingestellt. Das ganze allerdings durch Ansprechen der Register und nicht mit dem BASCOM-Config-Geraffel!
Hier mal mein Code:
$regfile = "m32def.dat"
$crystal = 16000000
$framesize = 80
$hwstack = 80
$swstack = 80
Ddrc = 255
Portc = 255
Ddra.0 = 0
Porta.0 = 0
Admux = &B01100000
Adcsra = &B11100010
Sfior = &B00000000
Dim X As Byte
Dim Maxamp As Byte
Dim Adchold As Byte
Dim Teiler As Byte
Dim Count As Word
X = 0
Maxamp = 0
Adchold = 0
Teiler = 0
Count = 0
Const Zustande = 8
Do
'(
While Adch = 0
Incr Count
Waitms 1
Wend
If Count >= 500 Then Adchold = 0
Count = 0
')
If Adch > Adchold Then Maxamp = Adch
Teiler = Maxamp / Zustande
X = Adch / Teiler
Adchold = Adch
Select Case X
Case 0 To 1
Portc = &B11111110
Case 1 To 2
Portc = &B11111100
Case 2 To 3
Portc = &B11111000
Case 3 To 4
Portc = &B11110000
Case 4 To 5
Portc = &B11100000
Case 5 To 6
Portc = &B11000000
Case 6 To 7
Portc = &B10000000
Case 7 To 8
Portc = &B00000000
End Select
Loop
End
Nun möchte ich mittels einer (oder auch mehreren xD) logischen Operation die MUX-Bits in ADMUX verändern, jedoch den Rest so belassen.
Also z.B.:
Admux = &B01100000 --> MUX-Bits: 00000 (Pina.0)
Nun möchte ich auf Pina.1 umschalten:
MUX-Bits: 00001 --> Admux = &B01100001
Wenns geht, sollte ich nur sagen müssen:
"Ich will jetzt auf Pina.x umschalten".
z.B.:
...
...
Dim Mux as Byte
...
Mux = 1 'für Pina.1
...
Mux = 2 'für Pina.2
...
Und dann wollte ich noch wissen, ob ich dann, wenn ich ADMUX verändert habe (bzw. die Mux-Bits), ob ich dann die erste Wandlung verwerfen muss oder ob ich eine bestimmte Zeit warten muss??
Vielen Dank im Voraus
Gruß
Chris
für eine "Musiklautstärke-8-Led-Anzeige" hab ich bei meinem Atmega32 den ADC auf Free-Run eingestellt. Das ganze allerdings durch Ansprechen der Register und nicht mit dem BASCOM-Config-Geraffel!
Hier mal mein Code:
$regfile = "m32def.dat"
$crystal = 16000000
$framesize = 80
$hwstack = 80
$swstack = 80
Ddrc = 255
Portc = 255
Ddra.0 = 0
Porta.0 = 0
Admux = &B01100000
Adcsra = &B11100010
Sfior = &B00000000
Dim X As Byte
Dim Maxamp As Byte
Dim Adchold As Byte
Dim Teiler As Byte
Dim Count As Word
X = 0
Maxamp = 0
Adchold = 0
Teiler = 0
Count = 0
Const Zustande = 8
Do
'(
While Adch = 0
Incr Count
Waitms 1
Wend
If Count >= 500 Then Adchold = 0
Count = 0
')
If Adch > Adchold Then Maxamp = Adch
Teiler = Maxamp / Zustande
X = Adch / Teiler
Adchold = Adch
Select Case X
Case 0 To 1
Portc = &B11111110
Case 1 To 2
Portc = &B11111100
Case 2 To 3
Portc = &B11111000
Case 3 To 4
Portc = &B11110000
Case 4 To 5
Portc = &B11100000
Case 5 To 6
Portc = &B11000000
Case 6 To 7
Portc = &B10000000
Case 7 To 8
Portc = &B00000000
End Select
Loop
End
Nun möchte ich mittels einer (oder auch mehreren xD) logischen Operation die MUX-Bits in ADMUX verändern, jedoch den Rest so belassen.
Also z.B.:
Admux = &B01100000 --> MUX-Bits: 00000 (Pina.0)
Nun möchte ich auf Pina.1 umschalten:
MUX-Bits: 00001 --> Admux = &B01100001
Wenns geht, sollte ich nur sagen müssen:
"Ich will jetzt auf Pina.x umschalten".
z.B.:
...
...
Dim Mux as Byte
...
Mux = 1 'für Pina.1
...
Mux = 2 'für Pina.2
...
Und dann wollte ich noch wissen, ob ich dann, wenn ich ADMUX verändert habe (bzw. die Mux-Bits), ob ich dann die erste Wandlung verwerfen muss oder ob ich eine bestimmte Zeit warten muss??
Vielen Dank im Voraus
Gruß
Chris