AD - AVR

Gast #135711
Hallo!
 Versuche verzweifelt meine AD Wandlung zum laufen zu bekommen, doch
irgendetwas klappt nicht!
möchte das beim überschreiten eines Schwellwertes ein Led
eingeschalten
und beim unterschreiten die Led ausgeschalten wird!
Doch das funktioniert nicht!
keine Ahnung warum!
AD Wandlung im singel conversion und interrupt mode



BSP

.include"tn15def.inc"

.org 0x000
rjmp RESET

.org 0x009
rjmp ADU


.def temp=r16
.def uni=r17
.def schwelle_1=r18
.def schwelle_2=r19

RESET:

ldi temp,0b00000011
out ddrb,temp

clr temp
out portb,temp

ldi temp,0b00100011
out admux,temp

ldi schwelle_1,0b01000000
ldi schwelle_2,0b10000000

ldi temp,0b11001111
out adcsr,temp

sei

mainloop:
rjmp mainloop





ADU:

IN uni,adcl
IN uni,adch

cp uni,schwelle_1

brsh setzen_1:

cbi portb,0

rjmp ende_1

setzen_1:

sbi portb,0

ende_1:



cp uni,schwelle_2

brsh setzen_2:

cbi portb,1

rjmp ende_2

setzen_2:

sbi portb,1

ende_2:

ldi temp,0b11001111
out adcsr,temp

reti
Gast #135712
da sind ja einige Sachen drin.

z.B.
IN uni,adcl
IN uni,adch

du überschreibst den Wert adcl in uni gleich wieder mit adch ohne etwas
damit gemacht zu haben. Und weil adch meines Wissens nie größer als 3
ist, weils ja nur die Bits 8 und 9 des 10bit-Wertes sind, wird er wohl
nie die Schwelle überschreiten.
Gast #135713
Hi...

Nööö...
In ADMUX ist ja (wenn ich mich nicht irre) ADLAR gesetzt, somit wird
das Ergebnis linksbündig ausgegeben. In UNI landen dann schon die
oberen 8 Bit... Das Lesen der unteren 2 Bit kann man sich übrigens
sparen.

Ich sehe da eher Probleme bei der Auswertung.
Es wird auf beide Referenzwerte geprüft, aber bei jedem eine von zwei
Aktionen (LED an/aus) ausgelöst. Da kann es schon mal passieren, dass
sich beide Tests widersprechen. In jedem Test würde ich nur eine Aktion
ausführen,
- beim Überschreiten des Maxwertes die LED einschalten,
- beim Unterschreiten des Maxwertes nix tun,
- beim Überschreiten des Minwertes nix tun,
- beim Unterschreiten des Minwertes die LED ausschalten...

Haste das mal durch den Debugger (Simulator des AVR-Studio) gejagt?

Das gesamte Programm habe ich jetzt aber mangels übersichtlicher
Schreibweise (fehlende Einrückungen und Kommentare, keine Verwendung
symbolischer Bitnamen) nicht analysiert.

Guten Rutsch...
...HanneS...
Gast #135714
Du hast mich falsch verstanden! Ich will zwei Schwellwerte prüfen! Das
Programm funktioniert am Simulator nur am Zielsystem läuft es nicht!
mfg momo
Gast #135715
Jou, falsch verstanden, zwei LEDs, nicht richtig hingeschaut...

Dann such mal bei den Int-Vektoren.
Der Int-Vektor zu ADC-Complete ist nämlich nicht 9 sondern 8...

Guten Rutsch...
...HanneS...
Gast #135717
Tja, ich bin von dieser Schreibweise der Vektoren wieder weg, ich
schreibe jetzt wieder die komplette Vektortabelle und setze für alle
unbenutzten Vektoren RETI ein. Das ist zwar etwas mühsamer beim
Portieren auf andere AVRs, birgt aber weniger Fehlerquellen (durch
Irrtümer).

...
Gast #135719
Durch deine Schreibweise der Int-Vektortabelle sind einige Zellen nicht
definiert. Es ist gut möglich, dass der Simulator da was Anderes
vermutet als in der Realität der Fall ist. Deshalb die andere
Schreibweise, da hat jede Flash-Zelle ihren fest definierten Inhalt.

...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.