Hilfe bei Projekt! Dringend!

Gast #319469
Lesenswert?
• ▲
▼
Hi,

also ich habe den Auftrag ein Lauflich zu Programmieren auf einem
ATmega8.

Ich habe 2 Lichtmodis mir ausgedacht und wollte diese jeweils durch
einen schalter von einander trennen.

Ich habe das Programm soweit geschrieben, allerdings läuft es nicht auf
meinem mikrocontroller.

Könnte bitte einer mal ein Auge auf das Programm werfen und mir sagen
was ich verbessern muss.

Bin am verzweifeln -.-

Code:

;*************************************;
;*Programm: Knight Rider Lauflicht RL*;
;*************************************;
;*Autor:        Heller Tobias     *;
;*Datum:           16.02.2006        *;
;*Letzte Änderung: 16.02.2006        *;
;*Version:         1.0               *;
;*************************************;


.include "m8def.inc"


ldi r16, 0xff      ;Port D wird als Eingang deklariert
out DDRD, r16

ldi r16, 0x00
out ddrb, r16

ldi r19,LOW(RAMEND)    ;Initailsierung für Unterprogramme
out SPL, r19
ldi r19,HIGH(RAMEND)
out SPH, r19

start:

rjmp schalter



Funky:

  rcall FunkyTown




;Hier steht die Procedure zu dem Lauflichtmodus KnightRider

KnightRider:

   ldi r16, 0b10000000      ;Die LED Nr.1 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b01000000      ;Die LED Nr.2 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b00100000      ;Die LED Nr.3 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b00010000      ;Die LED Nr.4 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b00001000      ;Die LED Nr.5 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b00000100      ;Die LED Nr.6 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b00000010      ;Die LED Nr.7 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b00000001      ;Die LED Nr.8 leuchtet
  out PORTD, r16

  rcall Warteschleife


  ldi r16, 0b00000001      ;Die LED Nr.8 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b00000010      ;Die LED Nr.7 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b00000100      ;Die LED Nr.6 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b00001000      ;Die LED Nr.5 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b00010000      ;Die LED Nr.4 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b00100000      ;Die LED Nr.3 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b01000000      ;Die LED Nr.2 leuchtet
  out PORTD, r16

  rcall Warteschleife

  ldi r16, 0b10000000      ;Die LED Nr.1 leuchtet
  out PORTD, r16

  rjmp start



;Hier steht die Procedure zu dem Lauflichtmodus "Funky Town"


Funkytown:

  ldi r16, 0b00011000      ;Die LED Nr.1 leuchtet
  out PORTd, r16

  rcall Warteschleife

  ldi r16, 0b00100100      ;Die LED Nr.2 leuchtet
  out PORTd, r16

  rcall Warteschleife

  ldi r16, 0b01000010      ;Die LED Nr.3 leuchtet
  out PORTd, r16

  rcall Warteschleife

  ldi r16, 0b10000001      ;Die LED Nr.4 leuchtet
  out PORTd, r16

  rcall Warteschleife

  ldi r16, 0b01000010      ;Die LED Nr.5 leuchtet
  out PORTd, r16

  rcall Warteschleife

  ldi r16, 0b00100100      ;Die LED Nr.6 leuchtet
  out PORTd, r16

  rcall Warteschleife

  ldi r16, 0b00011000      ;Die LED Nr.7 leuchtet
  out PORTd, r16

  rjmp start




;Procedur für DIE Warteschleife


Warteschleife:



    loop2:  ldi r17,0x01
        ldi r18,0x01
    loop1:  dec r18
        brne loop1
        dec r17
        brne loop2

    ret


Schalter:

in r20, portb
sbis portb, 1
rjmp KnightRider
rjmp Funkytown



ich weiß, dass das Programm sehr simpel und umständlich geschrieben
ist, also bitte keine Kommentare von wegen "was bistn du fürn Depp"
oder so ^^

schonmal danke im vorraus.

mfg Tobi
Gast #319470
Lesenswert?
• ▲
▼
Was meinst Du denn mit "läuft nicht"? Kannst Du eine einzelen LED zum
blinken bringen? Hast Du schon irgendein Programm auf diesem Controller
zum laufen gebracht? Welchen Oszillator benutzt Du? Sind die Fuses
korrekt programmiert?
Gast #319471
Lesenswert?
• ▲
▼
ahhhh ma ganz langsam ^^

also habe ein programm vom freund draufgehabt da hat alles wunderbar
funktioniert.

im simulator funktioniert es, allerdings nicht afu dem board.

was für einen ozilator ... einen quarz mit 4, 0000 MHZ

Was sind Fuses wenn ich fragen darf?

mfg Tobi
Gast #319473
Lesenswert?
• ▲
▼
Hi Flo, danke für deine antwort.

habe die schleife normalerweise auf 0xFF stehen.
0x01 ist nur zum testen, weil man dann bei step to step sieht ob es
funkst.

ist dieser delay generator beim normalen AVR studio dabei?

und wie bekomme ich das mit dem schalter geregelt?

habe den schalter jetzt mit einem 10k ohm vorwiederstand an den
controller und an masse angeschlossen an PB1

Danke im vorraus.

mfg Tobi
Gast #319478
Lesenswert?
• ▲
▼
> ldi r16, 0xff      ;Port D wird als Eingang deklariert
> out DDRD, r16
>
> ldi r16, 0x00
> out ddrb, r16

Du Deklarierst PORTD als Ausgang und PORTB als Eingang. Überprüf am
besten mal, ob das so stimmt.

Ansonsten solltest du lieber Timer für dein Lauflicht verwenden. Sieht
besser aus und du sparst dir die Schleifen. Dann kannst du auch das
Timing leichter verändern.
#319479
Lesenswert?
• ▲
▼
Delays:
Grund-Delay ca. 0.64msec:
1
.equ Speed=32  ;  8 = 1MHz; 16 = 2MHz; 32 = 4MHz; 64 = 8MHz; 
2
      ;128 = 16MHz; 160 = 20MHz
3

4
DELAY:
5
  push R16      ;Warteschleife
6
  ldi R16, Speed  ;Anzahl Durchläufe, siehe ganz oben
7
DELAY_AGAIN:
8
  dec R16      ;Durchläufe -1
9
  nop          ;Bremse
10
  nop
11
  nop
12
  tst R16
13
  brne DELAY_AGAIN  ;Abgelaufen? Dann raus
14
  pop R16
15
  ret

Zweite Stufe 100msec:
1
Delay100:
2
  push R16
3
  ldi R16,100
4
Delay100_A:  
5
  rcall Delay
6
  dec R16
7
  cpi R16, 0
8
  brne Delay100_A
9
  pop R16
10
  ret
Dritte Stufe 500msec:
1
Delay500:
2
  push R16
3
  ldi R16,10
4
Delay500_A:  
5
  rcall Delay100
6
  dec R16
7
  cpi R16, 0
8
  brne Delay500_A
9
  pop R16
10
  ret
So, damit hast du gleich drei universelle Delays
Speed entsprechend setzen, dann stimmen die angegebenen Zeiten.

Schalterabfrage ist ok, der Schalter wird direkt zwischen Controllerpin
und Masse gelegt, der 10kOhm-Widerstand kommt direkt zwischen
Controllerpin und 5Volt.

Gruss
Jadeclaw.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren