Forum: Mikrocontroller und Digitale Elektronik Programm starten


von Olaf E. (lotsinn)


Lesenswert?

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!

von David M. (md2k7)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von Olaf E. (lotsinn)


Lesenswert?

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?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Olaf E. (lotsinn)


Lesenswert?

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
Noch kein Account? Hier anmelden.