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.
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.
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?
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...
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/doc0856.pdf Und beim AVR Studio in der Hilfe werden auch alle befehle erklärt. Sebastian
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.
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
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...)
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. ;-) ...
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.