www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Auswertung von ADC bei Tiny13


Autor: Markus Reichert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich versuche gerade ein kleines Programm für den ATTiny13 zu schreiben, 
welches auf ADC1 einen Potiwert ausliest und auf PB0,1,3,4 als 
4-Bit-Wert wieder ausgibt.

Allerdings funzt das folgende Programm nur begrenzt. Bei den Werten aus 
datenh macht es nicht das, was es soll. Ich habe im Datenblatt 
nachgeschaut: es ist ein 10bit-Wert, welcher vom ADC kommt. Hat jemand 
von euch eine Idee, was ich falsch mache?

Ich habe zur Kontrolle vier LEDs angeschlossen. Diejenigen an PB0 und 
PB1 gehen richtig. Die an PB3 und PB4 werden falsch angesteuert... :-(

  .include "tn13def.inc"      ;Definitionsdatei laden


  .def akku = r16
  .def datenl = r17
  .def datenh = r18
  .def a4 = r19
  .def a8 = r20

  .cseg          ;Beginn eines Code-Segmentes
  rjmp start
  .org 0x09
  rjmp fertig
  .org 0x0B

start:

  ldi akku, LOW(RAMEND)
  out SPL, akku

  ldi akku, 0b00000001
  out ADMUX, akku    ; ADC1 aufPB2 gewählt

  ldi akku, 0b11101000
  out ADCSRA, akku    ; ADC ein, Start, Dauer, 0, Int.
                                       frei, Teiler 2

  sbi DDRB,0
  cbi PORTB,0

  sbi DDRB,1
  cbi PORTB,1

  sbi DDRB,3
  cbi PORTB,3

  sbi DDRB,4
  cbi PORTB,4

  sei



loop:
    cpi   datenl, 64
    brsh    n1
    cbi   PORTB, 0
    cbi   PORTB, 1
    rjmp    ndatenh

n1:    cpi    datenl, 128
    brsh  n2
    sbi  PORTB, 0
    cbi  PORTB, 1
    rjmp  ndatenh

n2:    cpi    datenl, 192
    brsh  n3
    cbi  PORTB, 0
    sbi  PORTB, 1
    rjmp  ndatenh

n3:    sbi  PORTB, 0
    sbi  PORTB, 1



ndatenh:
    andi  datenh, 0b00000011
    cpi  datenh, 0
    brsh   n1h
    cbi  PORTB, 3
    cbi  PORTB, 4
    rjmp   end

n1h:           cpi    datenl, 1
    brsh  n2h
    sbi  PORTB, 3
    cbi  PORTB, 4
    rjmp  end

n2h:           cpi    datenl, 2
    brsh  n3h
    cbi  PORTB, 3
    sbi  PORTB, 4
    rjmp  end

n3h:           sbi  PORTB, 3
    sbi  PORTB, 4

end:  rjmp loop


fertig:

  in r17, ADCL
  in r18, ADCH


  reti
  .EXIT


Wäre super, wenn mir jemand einen Tip hätte, wo mein Denkfehler liegt.

Danke und Gruß
Markus

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Programm verstehe ich nicht. Warum nimmst Du nicht einfach 
linksbündige ADC-Werte, schiebst ADCH 4x nach rechts und schreibst die 4 
verbleibenden Bits auf PORTB ?

Autor: Markus Reichert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weil ich bei PortB nur 0,1,3,4 zur Verfügung habe, um die Werte 
auszugeben...

Autor: Johannes A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht ist es nützlich, unter n1h und n2h das richtige Datenbyte zu 
befragen ;-)

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.