Forum: Mikrocontroller und Digitale Elektronik mega16: ADC+PWM


von dumme?frage (Gast)


Lesenswert?

hallo

das folgende programm soll werte über den ADC lesen, und entsprechend 
PWM frequenzen verändern

ich verwende den timer1

solange ich lediglich die routine für OCR1A durchlaufen lasse, verändert 
sich die frequenz der pwm wie gewünscht bei verändern der entsprechenden 
eingangsspannung.

sobald ich nun aber eine zweite spannung messen lasse und versuche eine 
2. frequenz mittels OCR1B erzeugen zu lassen, beeinflussen plötzlich 
beide ADC messwerte die frequenzen beider OCRs..

ich denke es ist bloss ne sache der konfiguration des Timer1? was hab 
ich übersehn?


mfg


.include "m16def.inc"
.def temp1=r16
.def temp2=r17
init:
    ldi      temp1, LOW(RAMEND)
    out      SPL, temp1
    ldi      temp1, HIGH(RAMEND)
    out      SPH, temp1

        ;OC1A/B
  ldi temp1, 1<<COM1A1 |1<<COM1B1 | 1<<WGM11 | 1<<WGM10
        out TCCR1A, temp1
        ldi temp1,  1<<CS11
  out TCCR1B, temp1

  sbi DDRD,4
  sbi DDRD,5
main:
;OCR1A
ldi temp1,0b01000000
out ADMUX, temp1
ldi temp1,0b11000010
out ADCSRA, temp1
waitadc1:
sbic ADCSRA,ADSC
rjmp waitadc1
in temp1,ADCL
in temp2,ADCH
out OCR1AH,temp2
out OCR1AL,temp1
clr temp1
clr temp2


;rjmp main ;- wenn gesetzt, geht alles wie gewünscht -


;OCR1B
ldi temp1,0b01000001
out ADMUX, temp1
ldi temp1,0b11000010
out ADCSRA, temp1
waitadc2:
sbic ADCSRA,ADSC
rjmp waitadc2
in temp1,ADCL
in temp2,ADCH
out OCR1BH,temp2
out OCR1BL,temp1
clr temp1
clr temp2

rjmp main

von dumme?frage (Gast)


Lesenswert?

so ich mal wieder


hab dieselbe routine jetzt auf den timer2 angewandt: selbe 
einstellungen, lediglich das adc ergebnis ist links ausgerichtet da 
timer 2 ja 8 bit ist:

einzeln funktionieren die routinen sowohl bei timer 1A, 1B sowie 2.
sobald 2 zusammen kommen beeinflussen verändernde werte an den 3 adc 
kanälen alle pwm kanäle...

WARUM?? ich verstehs echt nicht..
vorallem, wenn ich nur eine routine benutze, kann ich an den potis, die 
die andern kanäle steuern drehen wie ich will.. nur wenn ich sie alle 
abfrage verändern alle irgendwie alles.. wie kann das sein?

ich vermute den fehler jetzt mal beim adc.. was mach ich verkehrt?

von dumme?frage (Gast)


Lesenswert?

warum hat hier eigentlich keiner ne idee? kann doch nicht sein, dass ich 
der erste bin, der solche probleme hat...
und die beschreibung ist doch eig. auch ok?

naja wie dem auch sei, ich hab jetzt einfach mal immer bevor der ADC 
kanal geändert wird ADEN und ADSC auf null gesetzt. schonmal besser 
geworden. allerdings beeinflussen sich die 3 potentiometer scheinbar 
immer noch ein wenig gegenseitig. wie kann ich das filtern? hardware 
oder software?

von Michael U. (Gast)


Lesenswert?

Hallo,

abgesehen davon, daß Dein Code für andere schwer lesbar ist, keine 
Formatierung, keine Kommentare, oben noch halbwegs ordentlich mit 
1<<Name, unten nur noch Bitmuster, wo man dann erst im Datenblatt kramen 
müßte, was Du da setzt......

Die erste Messung nach Umschalten des MUX ist meist Schrott, nach 
Eingangswechsel erstmal eine Dummy-Messung machen, das Ergebnis 
wegwerfen und dann nochmal messen.

Gruß aus Berlin
Michael

von dumme?frage (Gast)


Lesenswert?

wow.. alles klar herzlichen dank an dich. problem gelöst

ES GEHT..

und ich reg mich nach ca. 24h rumprobieren auf, dass ich nicht gleich 
gemacht hab was ich (im datenblatt?) schonmal gelesen hab.. :/

tja.. danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.