Forum: Mikrocontroller und Digitale Elektronik ATMEGA 16 Problem mit Assembler und AVR-Studio (Einstieg)


von Walter T. (nicolas)


Lesenswert?

Guten Tag,

ich versuche gerade den Einstieg in den Assembler der AVRs zu finden. 
Mit C habe ich da schon einiges gemacht, aber man will sich ja 
weiterentwickeln...

Als Entwicklungsumgebung nutze ich AVRStudio 4 (Service Pack 2). Zum 
ersten Testen verwende ich folgenden Assembler-Code (aus dem Buch 
"Günter Schmitt:
Mikrocomputertechnik mit Controllern der Atmel-RISC-Familie" mit 
leichten Abwandlungen):
1
; k2p1.asm Bild 2-2 Dualzähler als Taktteiler
2
; Seite 67
3
; PORTB: Ausgabe LED PB0 = Takt / 10   PB 7 = Takt / 1280
4
; PORTD: -
5
        .NOLIST          ;
6
    .INCLUDE <m16def.inc>  ; Deklarationen für ATmega16
7
    .LIST          ;
8
    .DEF  akku = r16    ; Arbeitsregister
9
    .CSEG          ; Programm-Flash
10
RESET:  rjmp  start      ; Reset-Einsprung
11
      .ORG  INT_VECTORS_SIZE          ; Interrupteingänge übergehen
12
start:  ldi    akku,LOW(RAMEND); Stapelzeiger
13
    out    SPL,akku    ; anlegen
14
    ldi    akku,HIGH(RAMEND);
15
    out    SPH,akku    ;
16
    ser    akku      ; akku <- $ff
17
    out    DDRB,akku    ; PortB ist Ausgang
18
    out    DDRD,akku    ; PortD leuchtet!
19
    out    PORTD,akku    ;
20
    clr    akku      ; Zähler löschen
21
; Taktteile: 5 Takte Low / 5 Takte High gibt Takt / 10
22
loop:  out    PORTB,akku    ; 1 Takt: Zähler ausgeben
23
    inc   akku      ; 1  Takt: Zähler erhöhen
24
    nop            ; 1 Takt: Verlängerte Schleife
25
    rjmp  loop      ; 2 Takte: Schleife
26
    .EXIT          ; Ende des Quelltextes

Die Assemblierung funktioniert fehlerfrei, auch die Simulation im 
AVR-Studio macht genau das, was ich auch erwartet habe. Allerdings ist 
der ATmega16 nach dem Hochladen des Quelltextes völlig stumm. Von den 
Fuses gehe ich aus, daß sie stimmen, weil in C unter AVR-Studio 
erstellte Programme direkt laufen.

Die Assembler-Optionen sind wie default (außer daß er er noch zusätzlich 
ein "list-file" erstellt), also:
- AVR-Assembler Version 2
- Intel Intellec 8 (Intel hex)

So langsam gehen mir die Ideen aus, was man noch ausprobieren könnte 
oder was ich nicht beachtet haben könnte, deshalb wäre ich für eine 
diesbezügliche Hilfe sehr dankbar.

Viele Grüße
Nicolas

von Otto (Gast)


Lesenswert?

Hallo Nicolas,

ich nehme an, Du hast nicht den Quelltext, sondern das Hex-File 
übertragen.
Wie sieht denn Deine Hardware und Spannungsversorgung aus und an welchen 
Ports hänegen die LED.

Gruss Otto

von Kai G. (runtimeterror)


Lesenswert?

Hast du schon mal erfolgreich ein Programm auf dem Controller ans Laufen 
bekommen?

Womit überträgst du den Code? Wird der nach der Übertragung verifiziert?

von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,

danke für die schnellen Antworten und die Anregungen, insbesondere mit 
den Spannungsversorgungen.

Mitlerweile habe ich es durch Zufall herausgefunden: Der Beispielcode in 
C, der genau das gleiche machen sollte (bis auf das Timing, das ist ja 
in C nicht ganz so Taktgenau einstellbar) hatte die Ausgabe auf PORTC, 
nicht auf PORTB und PORTD. PORTC funktioniert aber -im Gegensatz zu den 
anderen beiden- auch, wenn auf AVCC keine Versorgungsspannung liegt - 
die hatte ich nämlich vergessen.

Einen schönen Sonntag wünscht euch noch
Nicolas

von Kai G. (runtimeterror)


Lesenswert?

Ok, passiert dir wahrscheinlich beim nächsten Mal nicht mehr :)

Schönes Restwochenende!

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.