mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mega16: ADC+PWM


Autor: dumme?frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: dumme?frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: dumme?frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: dumme?frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.