mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schleife mit Inhalt


Autor: Martin S. (maklin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich habe mir mal ein Atmega8 gekauft, um ein wenig
rumzuexperimentieren, was möglich ist.
Ich wollte testweise 2 LEDs ansteuern, die eine soll im sekundentackt
an- bzw ausgehen,  die andere beispielsweise alle 10 sec.
Mein eigentliches Problem ist folgendes: Wie komme ich aus dieser
Schleife nach zB 5-fachen Durchlauf (=10sec) einmal raus, um die 2. LED
zu schalten?


sekunda:
         SBR R17,0b00000001
     out PORTD, r17
     rcall delays


         CBR R17,0b00000001
     out PORTD, r17
     rcall delays
     rjmp sekunda

(ich hab mal den Kram davor und danach weggelassen, weil der meiner
Meinung nach hierfür unwichtig ist)

Ich habe schon einiges ausprobiert an Befehlen, doch will es einfach
nicht. delays ist übrigens ein Schleife, die eine Sekunde wartet.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mist die Beiden Schleifen verschachteln. Dann zählst du in der ersten
Schleife bis 5, beendest sie erledigst die Aufgabe der Zweitsch Schleife
und springst wieder in die erste Schleife und so weiter.

Autor: Martin S. (maklin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok erstmal danke.
In diese Richtung hatte ich auch gedacht, doch fehlen mir die
benötigten Befehle, bzw die von denen ich sowas erwartet hatte wollten
nicht. Hast du die richtigen Befehle gerade im Kopf?

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Davon abgesehen kann der ATMega8 weitaus mehr als nur ´n paar LEDs
blinkern lassen. Wenn Du Dich irgendwann einmal an Interrupts und Timer
herantraust, brauchst Du keine Delay-Schleifen mehr und Dein Prozessor
kann immer fleißig durchrattern und nebenbei noch 1000 andere Aufgaben
erledigen. Im Datenblatt (englisch) findet man viele wertvolle
Hinweise. Vorsicht beim ATMega8 mit den Fuses, besser nicht dran
herumspielen, wenn´s nicht wirklich Absicht ist, sonst hat man sich
schnell einmal ausgesperrt...

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannste doch schnell mal nachschaun. Dann verinnerlicht man die Befehle
auch besser als wenn man nur das vorgesetzte abschreibt.

Hier gibts das komplette Instruction set.Alle Befehle mit Erklärun und
ne zusammengefasste Kurzversion. Achtung, is auf alle AVRs bezogen, es
sind also nicht alle Befehle im Mega8 verfügbar. Im Datenblatt des
Mega8 steht glaub ich drin welche befehle der genau unterstützt.

http://www.atmel.com/dyn/resources/prod_documents/...

Und beim AVR Studio in der Hilfe werden auch alle befehle erklärt.

Sebastian

Autor: Martin S. (maklin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nunja dass deutlich mehr drin steckt als ein paar LEDs ansteuern habe
ich auch erhofft, doch muss es ja eigentlich erstmal bei den LEDs
klappen ehe ich was sinnvolleres damit mache.
Ich habe in dem Dokument reingesehen und etwas entdeckt, was gehen
müsste, doch will es nicht:

         clr r18
sekunda:
         SBR R17,0b00000001 ; Bit 0 setzen
     out PORTD, r17
     rcall delays
     inc r18

         CBR R17,0b00000001 ; Bit 0 löschen
     out PORTD, r17
     rcall delays

     inc r18

     CPI r18,5
     breq stunda
     rjmp sekunda



stunda:  SBR R17,0b00000010 ; Bit 1 setzen
     out PORTD, r17
     clr r18
     rjmp sekunda

Also irgendwas muss ja falsch sein, da immer noch nur meine 1. LED
leuchten will.

Autor: André Kronfeldt (freakazoid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

SBR und CBR zählen von 0..7. D.h.
ein "SBR R17,0b00000001" mit folgendm "out PORTD, r17"
setzt PORTD.1
und ein "SBR R17,0b00000010" ... PORTD.2

Hast Du Deine LEDs da angeschlossen, oder - eher vermutet - an
PORTD.0 und PORTD.1 Dann wirdst Du nur die LED an PORTD.1 bewundern
können.

BTW:
Benutze nicht "SBR R17,0b00000001". Das sieht so aus, als ob der
Index 8Bit breit ist. Geht aber wie gesagt nur von 0-7. Um ein Register
zu laden benutzt man meistens 'ldi'.

Noch kürzer für Deine Zwecke:

equ LED0 = PD0
...
SBI PORTD, LED0
...

Grüße,
Freakazoid

Autor: Martin S. (maklin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry wegen doppelpost...
Aber das Problem hat sich jetzt gelöst: Man kann etwas nicht mit 5
vergleichen, wenn immer 2 Addiert werden (wegen doppeltem Vorkommen von
CPI...)

Autor: André Kronfeldt (freakazoid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Argh. Vergiß das mit der Zählreihenfolge.

Autor: André Kronfeldt (freakazoid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wohl eher wegen doppeltem 'inc r18'.

Autor: Martin S. (maklin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eh ja falsche Zeile abgeschrieben...;-)

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Drucke dir doch einfach mal die Befehlsliste aus dem Datenblatt aus.
Dann hast du eine Übersicht, in der du mit Bleistift und Textmarker
arbeiten kannst (geht auf dem Bildschirm immer so schlecht). Die
konkrete Erklärung zu jedem Befehl gibt es dann in der
kontextsensitiven Hilfe des AVR-Studios.

Auch das Ausdrucken der Liste der I/O-Adressen schadet nicht...

Aber nicht nur ausdrucken, sondern beim Programmieren auch mal drin
nachschlagen. ;-)

...

Autor: Martin S. (maklin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine Frage:
Ich habe ein LCD-Display angeschlossen und es zeigt den Text nicht
richtig an. Da ich früher mal LCDs am Rechner angesteuert habe weiß
ich, dass das Problem am Display und nicht am AVR liegt (andere
Displays werden sicher ordentlich gehen, sie gingen ja am Computer
auch).
Also ich will einen Text schreiben der lautet: "Der LCD-Testschirm als
Beispiel für mein LCD!:-)"
Das Display ist 4x20, leider reflektiert es zu sehr beim fotografieren
daher habe ich den Text so wie er tatsächlich angezeigt wird in ein
LCD-Programm geschrieben.
Also hat ja eigentlich nichts mit AVR zu tun, aber ich dachte mir
vielleicht weiß es jemand, weil hier viele Leute mit LCDs
rumexperimentieren.

Autor: Martin S. (maklin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry wegen Doppelpost aber
irgendwie ist das Bild nicht mitgekommen (wird jedenfalls bei mir nicht
angezeigt). Ich habs
hochgeladen:http://www.ewetel.net/~andreas.schwerter/LCD-Problem.JPG

Autor: Martin S. (maklin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habt ihr da vielleicht eine Idee? Ist so echt ärgerlich.

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.