mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD - AVR


Autor: Momo (Gast)
Datum:

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

Autor: Matthias H. (Gast)
Datum:

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

Autor: ...HanneS... (Gast)
Datum:

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

Autor: Momo (Gast)
Datum:

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

Autor: ...HanneS... (Gast)
Datum:

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

Autor: Momo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke ...HanneS...!
Das wars! nur stellt sich die Frage wieso das progi am simulator
richtig gelaufen ist!

Autor: ...HanneS... (Gast)
Datum:

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

...

Autor: Momo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DAnke!
Duch Simulatorfrage ist noch immer nicht beantwortet

Autor: ...HanneS... (Gast)
Datum:

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

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.