Zum setzen eine Bitmaske oder verknüpfen
zum löschen eine bitmaske invertieren und mit und verknüpfen.
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:
Nun möchte ich mittels einer (oder auch mehreren xD) logischen Operation die MUX-Bits in ADMUX verändern, jedoch den Rest so belassen.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
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.:
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??Code:... ... Dim Mux as Byte ... Mux = 1 'für Pina.1 ... Mux = 2 'für Pina.2 ...
Vielen Dank im Voraus
Gruß
Chris
Zum setzen eine Bitmaske oder verknüpfen
zum löschen eine bitmaske invertieren und mit und verknüpfen.
Kultuverein Metal Resurrection, für mehr Bands und Konzerte in Österreich (:
Hallo TheDarkRose,
erstmal danke für deine Antwort, allerdings hab ich noch nie wirklich mit Bitmasken gearbeitet.
Könntest du mir mal ein Beispiel geben oder das ganze etwas genauer erläutern, v.a. das
Wäre wirklich sehr nett von dir!Zitat von TheDarkRose
Gruß
Chris
Und Verknüpfung machste mit Bascom einfach mit AND (If Bedingung 1 = 1 AND Bedingung 2 = 1 then Ergebniss = 1).
Und wie meinst du das mit Wandlung verwefen? Jedesmal wenn der ADC eine neue Wandlung macht, wird der Registerinhalt überschrieben.
Das mit dem AND bei If-Abfragen ist mir klar, allerdings meinte ich das nicht, sondern sowas in der Art:
Wenn ich das Register (z.b. ADMUX) überschreibe, ist die erste Wandlung dann Mist oder kann ich dieser Vertrauen?Code:A = A or B .... usw.
Wieso sollte es Mist sein? Der ADC macht eine Wandlung mit den eingestellten Parametern. Wenn du nach der Wandlung die Parameter änderst sollte das eigentlich nichts am Ergebniss ändern.
@Che Guevara:
1) ADMUX = ADMUX Or &B00000001
2) ADMUX = ADMUX And &B11111110
(Prinzip!)
Gruß Dirk
Code:sub adc_kanal(_channel as byte) local _temp as byte _temp = Admux And &B11110000 'oberes Nibble retten Admux = _temp Or _channel 'Kanal setzen end sub
so hab ichs gelöst
Gruß BoGe-Ro
Geht sogar noch einfacher. Das 5. und 6. Bit in ADMUX soll ja auf 1 bleiben.
(&B01100000)
Dann kannst du einfach die Summe bilden
oder dezimal:Code:Admux = &B01100000 + _channel
Funktioniert aber nur solange du die oberen Bits nicht während dem Betrieb nochmal ändern möchtest.Code:Admux = 96 + _channel
Gruß Bernhard
Lesezeichen