mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Assembler, LED-Dimmen


Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe ein programm geschrieben, welches zwei leds über zwei 
Vergleichsregister (OCR1A/OCR1B) steuert/dimmt. Die LEDs fangen 
gleichzeitig an hinauf zu dimmen. Nun ab einen bestimmten Punkt 
verzögert eine LED um einen Schritt. Es wird nun sauber weiter hinauf 
gedimmt aber die eine LED ist natürlich einen Schritt später fertig. Ich 
habe OCR1A und OCR1B vertauscht und mir ist aufgefallen dass es nur bei 
OCR1A auftritt. Anschleißend habe ich einen neuen Atmega16 ausprobiert, 
das Problem ist geblieben. Nun komme ich nicht mehr weiter und bitte um 
Hilfe.

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

Bewertung
0 lesenswert
nicht lesenswert
Warum schickst Du die Projektdatei? Mit der kann in dem Zusammenhang 
keiner was anfangen, weil die keinen Quellcode enthält.

Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
nun hier ist die asm-Datei

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

Bewertung
0 lesenswert
nicht lesenswert
>  out  OCR1AL,  DimWertL      ;gib DimWertL in OCR1AL aus
>  out  OCR1AH, DimWertH      ;gib DimWertH in OCR1AL aus
Du beachtest die Zugriffsreihenfolge beim Schreiben der Compare-Register 
nicht! Beim Schreiben von 16-Bit-Registern der Timer muss 
grundsätzlich das High-Byte zuerst geschrieben werden.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, danke probiere ich gleich aus

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

Bewertung
0 lesenswert
nicht lesenswert
Info: Datenblatt (aktuelle Version von 08/07) z.B. auf Seite 92, 
Abschnitt "Accessing 16-Bit Registers"...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da ist irgendwie nichts gescheites rausgekommen. Ich habe auch 
nachgeschaut, ich kanns mir nicht erklären aber er schreibt den high 
wert zuerst, soweit ich dass in AVR Studio überblickt habe.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kann ich ein Video anhängen?

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

Bewertung
0 lesenswert
nicht lesenswert
> aber er schreibt den high
> wert zuerst, soweit ich dass in AVR Studio überblickt habe.
Warum sagst Du nicht gleich, dass Du das im Simulator machst? Der 
Simulator hat einige Macken, was die 16-Bit-Timer angeht. Zitat aus der 
Hilfe:
"16-bit Timer/Counters on all devices have several problems with PWM, 
prescaler and output compare. Output compare registers are not buffered 
properly."

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

Bewertung
0 lesenswert
nicht lesenswert
Stefan wrote:
> wie kann ich ein Video anhängen?
Am besten gar nicht.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als ich die high werte zuerst geladen habe haben sich die led nicht 
sauber gedimmt. wenn ich die low werte zuerst lade dimmen sie sauber nur 
dass ocr1A mittendrin die Dimmstufen um einen Schritt verzögert ausgibt. 
Der ocr1B macht es sauber(geprüft auf dem Board). Es kann auch sein dass 
ich mehrere Fehler drin habe und sie sich so ausgleichen. Ich habe erst 
angefangen zu "programmieren"

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du icq?
dann könnte ich dir das im video zeigen

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

Bewertung
0 lesenswert
nicht lesenswert
Stefan wrote:
> hast du icq?
> dann könnte ich dir das im video zeigen
Nein, hab ich nicht. Hast Du es mittlerweile noch mal im realen System 
ausprobiert?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, schon aber die Abfolge der Helligkeiten der Leds ergiebt irgendwie 
keinen Sinn. Ich hab die werte auch umgedreht 2,4,8 usw. auch hierbei 
ist nichts brauchbares herrausgekommen. Im Internet habe ich auch 
gelesen dass das high Byte zuerst geladen werden muss. Andersherum gings 
eben bei mir besser :-D. Was ich überhaupt nicht verstehe, warum 
arbeiten im realen System OCR1A und OCR1B nicht "geich"

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

Bewertung
0 lesenswert
nicht lesenswert
>   ldi   r16,  0x03          ;Z�hler setzen, jetz fangt er mit der
>   out   TCNT1H,  r16            ;Hauptschleife zu z�hlen an
>   ldi   r16,  0xFF
>   out   TCNT1L,  r16
Hat zwar vermutlich nix mit dem eigentlichen Problem zu tun, aber fiel 
mir grad noch so auf: Was soll das da? Warum lädst Du den Timer am 
Anfang vor?

Was Du da in der Hauptschleife machst, erschließt sich mir auch nicht so 
ganz...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohne diesen vers fangen die leds nicht "sauber" an, versteh ich selber 
nicht so ganz, habe irgendwo im internet gefunden, funktioniert aber

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

Bewertung
0 lesenswert
nicht lesenswert
Stefan wrote:
> ohne diesen vers fangen die leds nicht "sauber" an,
              ^^^^
Vers? Als Gedicht oder gar Lied würde ich das Programm aber nicht 
bezeichnen...;-)

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich könnte dir das video doch über email schicken?

Autor: Johannes M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will es aber nicht haben!

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.