Moin Allerseits! endlich komme ich dazu mich mit den Atmel uC`s zu befassen, hab mir hierfür schon vor längerer Zeit u.a. ein STK500 zugelegt und jetzt endlich angeschlossen. Ich hab das gerade mit einem ATMEGA32 16PU bestückt und das "Novice`s Guide to AVR Development" durchgearbeitet. In der Simulation arbeitet das auch wunderbärtig, nur nach dem übertragen auf den Mega32 leuchteten alle LED`s gleichzeitig und gleich hell. Ich bin davon ausgegangen das die auch bei hoher geschwindigkeit in abhängigkeit der wertigkeit der Bit`s unterschiedlich stark leuchten/blinken (PWM). Um sicher zu gehen habe ich mal den Anfangswert statt auf 0xFF auf 0xAA umgestellt und siehe da, es leuchtet jede 2te LED. d.h. das Programm rennt nicht in den LOOP Muss ich dem Teil nen Tritt verpassen damit das losrennt? Hier das Prog: ; My Very First AVR Project .include "m32def.inc" .def Temp = R16 .org 0x0000 rjmp RESET RESET: ldi Temp, 0xAA out DDRB, Temp Loop: out PortB, Temp dec Temp rjmp Loop Vielen Dank schonmal für die Hilfe!
Hi, was du in DDRx schreibst, ist die Datenrichtung! Also eine 0 für input und ne 1 für Output. Da Temp immer überläuft, ändert der Anfangswert am Blinken nicht viel. Deine Schleife ist viel zu schnell, da wird man mit bloßem Auge nichts sehen. Du musst entweder eine Warteschleife einbauen, oder mit den Timern arbeiten. Cu David
Es ist viel zu schnell, als daß Du da ´was sehen kannst. Leuchten können immer nur die LEDs, deren Ports Du per DDRB aktivierst. Nochwas: die LEDs am STK500 sind invertiert. Auf jeden Fall wird die Loop laufen. Damit Du etwas sehen kannst, mußt Du das Programm langsamer machen (Timer oder Warteschleifen) oder den externen Takt am Controller herunternehmen.
Travel Rec. wrote: > Es ist viel zu schnell, als daß Du da ´was sehen kannst. Leuchten können > immer nur die LEDs, deren Ports Du per DDRB aktivierst. Hallo David, Hallo Travel, vielen dank für die Fixen Antworten. Um zu sehen ob es an der Geschwindigkeit liegt oder ob das Programm nicht losläuft habe ich ja den Anfangswert 0xAA gesetz, wenn das Teil zu schnell ist, dann sollten doch alle LED leuchten oder nicht? Bei mir leuchten die genau so wie ich den anfangswert in das Register Temp schreibe (0xAA = jede 2te LED, 0x01 = LED0 usw.) für mich sieht das so aus als würde einfach der Loop nicht abgearbeitet werden oder bin ich völlig auf dem Holzweg?
1 | ; My Very First AVR Project |
2 | .include "m32def.inc" |
3 | .def Temp = R16 |
4 | .org 0x0000 |
5 | rjmp RESET |
6 | |
7 | RESET: |
8 | |
9 | ldi Temp, 0xff |
10 | out DDRB, Temp |
11 | ldi Temp, 0xAA |
12 | out PORTB, Temp |
13 | |
14 | Loop: |
15 | |
16 | out PortB, Temp |
17 | dec Temp |
18 | |
19 | rjmp Loop |
Versuch mal das.
Läubi Mail@laeubi.de wrote:
>
1 | ; My Very First AVR Project |
2 | > .include "m32def.inc" |
3 | > .def Temp = R16 |
4 | > .org 0x0000 |
5 | > rjmp RESET |
6 | > |
7 | > RESET: |
8 | > |
9 | > ldi Temp, 0xff |
10 | > out DDRB, Temp |
11 | > ldi Temp, 0xAA |
12 | > out PORTB, Temp |
13 | > |
14 | > Loop: |
15 | > |
16 | > out PortB, Temp |
17 | > dec Temp |
18 | > |
19 | > rjmp Loop |
Versuch mal das. Ah, nun leutet alles, ich glaube jetzt beginne ich zu verstehen, mit FF werden bei Out DDRB alle Bit`s auf ausgabe eingestellt, jetzt verstehe ich Davids kommentar mit der Datenrichtung. in PortB kann reingeschrieben werden was dann ausgegeben werden soll oder? Dann werd ich als nächstes mal mit der eingabe experimentieren :-)
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.