Forum: Mikrocontroller und Digitale Elektronik Auswertung von ADC bei Tiny13


von Markus Reichert (Gast)


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

von Michael (Gast)


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 ?

von Markus Reichert (Gast)


Lesenswert?

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

von Johannes A. (Gast)


Lesenswert?

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

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.