mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC wird nicht richtig ausgewertet (ATiny15)


Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe zur Übung ein kleines Assembler-Programm für den Tiny15 
geschrieben. Letztlich soll über einen Poti das PWM-Signal eingestellt 
werden.
Den Code habe ich ganz unten angehängt.

Problem: Zunächst schein alles zu funktionieren, das PWM ändert sich mit 
der Potieinstellung. Allerdings bekomme ich vier mal einen "Überlauf", 
also das Signal hat DutyCycle 100% und danach 0% ?!
Das selbe würde (theoretisch) passieren, wenn der ADC im ADLAR=0 
eingestellt und ausgelesen wird, also die beiden höchsten Bytes nicht 
beachtet werden würden. Dies ist aber hier nicht der Fall!?

Gibt es noch weitere Einstellungen die ich nicht beachtet habe??

Danke für Eure Hilfe!


Timo


; PB1  Ausgang PWM
; PB4  Eingang ADC




.include "tn15def.inc"

.def WRegister    =  R16
.def LEDNr      =  R17
.def RDummy      =  R18
.def RHelligkeit0  =  R19
.def RHelligkeit1  =  R20
.def RHelligkeit2  =  R21

.org  $000

rcall Init
rjmp Main

    .org $003  ;Timer1 Compare Match
      nop  
    .org $004  ;Timer1 Overflow handler
      rjmp TIM1_OVF
    .org $005  ;Timer0 Overflow handler
      nop


.org $009

Init:

    ldi   WRegister,0x00|(1<<PB1)|(1<<PB2)|(1<<PB3)  ; PB1 als Ausgang
    out   DDRB,WRegister

  ;PWM einstellen

    ldi   WRegister,(0<<CS13)|(1<<CS12)|(1<<CS11)|(1<<CS10)|(1<<PWM1)|(1<<COM1A1)|(1<<COM1A0)  ; invertierte PWM einsschalten -> Geschwindigkeit CK
    out   TCCR1,WRegister

    ldi   WRegister,(0<<OCIE1A)|(1<<TOIE1)|(0<<TOIE0) ;Interruptregister schalten
    out   TIMSK,WRegister



    ldi   WRegister,0xFF  ;Pulsweite einstellen; zähle bis hier her
    out   OCR1B,WRegister


    ldi   WRegister,0x80  ;Pulsweite einstellen
    out   OCR1A,WRegister

  ;ADC
    ldi    WRegister,(1<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX2)|(1<<MUX1)|(1<<MUX0) ;mit ADLAR links reicht das HB zur Steuerung aus
    out   ADMUX,WRegister
    
    ldi    WRegister,(1<<ADEN)|(1<<ADSC)|(1<<ADFR)
    out    ADCSR,WRegister

    sei

    ret            ;zurückspringen

Main:

    nop

    rjmp   Main


TIM1_OVF:
    in    RDummy,ADCH      ; von Poti lesen
    lsl    RDummy
    lsl    RDummy
    out   OCR1A,RDummy    ; und als PWM-Wert einstellen

    reti

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du mit gesetztem ADLAR nur das High-Byte einliest und das um 2 
Stellen nach links schiebst, dann ist doch klar, dass die beiden MSB 
links rausfallen. Und dann ist auch klar, dass über den Wertebereich 4 
Überläufe der 6 LSB auftreten. Ich weiß nicht, was Du mit dem 
Linksschieben bezwecken willst, aber so kann das nicht funktionieren.

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups!

Nein, das Linksschieben macht keinen Sinn. Da habe ich nur was probiert 
und vergessen es raus zu machen. Also bitte die beiden Schiebebefehle 
vergessen...

Noch was: Die angelegte Spannung liegt zw. 0..5 V.


Gruß

Timo

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timo wrote:
> Noch was: Die angelegte Spannung liegt zw. 0..5 V.
Du hast aber die interne Referenz von 2,56 V ausgewählt. Das schreit 
schon mal nach Problemen.

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, das seh ich ein.
Dann müsste doch aber bei ca. 0x200 der ADC in Clampbetrieb gehen? Aber 
selbst wenn nicht, dann würde sich damit nur ein Überlauf erklären!?

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.