Wie fange ich an?

destany9

Neues Mitglied
17. Juni 2010
14
0
0
Sprachen
Nun da das Pony Problem gelöst ist kommt die nächse Hürde...

Die beiden LED´s auf meinem Board sollen leuchten.
Das was ich mir dis jetzt eus dem Netz zusammengereimt habe schaut wie folgt aus...

Ich schreibe das Programm in AVR Studio 4;

*********************************************************
* Test 1
* LED`s an PD5 und PD6 ein
*********************************************************

.include "m32def.inc" ; Definition für ATmega32

ldi r16, 0xff
out DDRD, r16


ldi r16, 0b01100000
out PORTD, r16

ende: rjmp ende

Diese *.asm ( Bei mir test.asm ) lade ich mit PonyProg2000
=> und lade sie mit "write device"

Resultat nix....

Habe ich die Anweisungen richtig geschreiben?
Arbeite ich so richtig mit den beiden Programmen?
 
Hi,

ich hab mir ja das Pollin-Board nachgebaut und hier ist ein kleines Testprog
mit nem Mega8535 (kompatibel mit Mega32). Ersetz mal die Definitionsdatei
durch die für den Mega32 (ein wenig mußt du ja auch noch machen ;) ) und
dann spiel mal ein wenig rum ...


CodeBox ASM

; ---------------------------------------
; Test-Projekt: blinkende LED an Port PB0
; ---------------------------------------
;
.include "m8535def.inc" ;Definitionsdatei laden
.cseg ;Beginn eines Code-Segmentes
.org 0 ;Startadresse=0
;
start: ldi r16,low(ramend)
ldi r17,high(ramend)
out spl,r16 ;Stackpointer auf
out sph,r17 ;RAM-Ende setzen

; PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0
; Buz Ld2 Ld1 T3 T2 T1 TxD RxD
ldi r16,0b11100000 ;PortD: PD7-5 auf Ausgang
out ddrd,r16 ;setzen
ldi r16,0b00011100 ;PortD: PD4-2 PullUp ein
out portd,r16 ;setzen
clr r16 ;Anfangswert setzen
;
loop:


in r20,pind

cbr r20,0b11100011

lsl r20
lsl r20
lsl r20
; lsl r20

; ldi r20,0b10000000
out portd,r20 ;Daten an PortD ausgeben


rcall wait ;Warteschleife aufrufen
inc r16 ;Datenwert erhöhen

rjmp loop ;Schleife neu beginnen
;
; Warteschleife (ungefähr 500ms)
;
wait: ldi r19,5 ;r19, r18 und r17
clr r18 ;ergeben zusammen
clr r17 ;einen 3-Byte-Zähler
wait1: dec r17 ;niedrigstes Byte -1
brne wait1 ;0 erreicht? nein -> Schleife
dec r18 ;mittleres Byte -1
brne wait1 ;0 erreicht? nein -> Schleife
dec r19 ;höchstes Byte -1
brne wait1 ;0 erreicht? nein -> Schleife
ret ;Schleifenende, Rückkehr

Als Download ... Anhang anzeigen Pollin-Asm-Test_M8535.asm
so richtig schön kommentiert ist das Programm leider nicht. War auch nur nen
Testprogramm. Was auch noch zu verbessern ist ...
- interne PullUps bei PD2..4 abschalten (PortD2..4 auf 0)
naja ... für die ersten Versuche hast du auf jeden Falll schon mal ein
Grundgerüst.

Diese *.asm ( Bei mir test.asm ) lade ich mit PonyProg2000
=> und lade sie mit "write device"

Resultat nix....
glaub ich gerne ;)
Bei mir heißt die fertige Datei für PonyProg ... Pollin-Asm-Test_M8535.hex
und hat diesen Inhalt ...
Code:
:020000020000FC
:100000000FE512E00DBF1EBF00EE01BB0CE102BB0D
:10001000002740B34C71440F440F440F42BB02D041
:100020000395F7CF35E0222711271A95F1F72A9586
:08003000E1F73A95D1F70895BC
:00000001FF
Das ist Intel-Hex-Format und ist das binäre ausführbare Programm für den
Atmel in Hexadezimaler Schreibweise und mit Checksummen. Das wird dann
von PonyProg zum Atmel übertragen und ins Flash geschrieben. Das .asm ist
dein Quellcode. Also sieht es so aus ...
Mensch ==Editor==> .asm-Datei ==Compiler==> .hex-Datei ==PonyProg==> Atmel

Gruß
Dino
 
Danke schon mal Dino,

Wie genau mache ich jetzt aus der *.asm eine *.hex ?
Würde denn so meine Anweisung auch klappen mal rein von der Syntax her?
Dein Beispiel ist sehr gut nur vom Verständniss her komm ich ab dem Sprungbefehl "loop" nicht mehr mit :)
 
Hi,

Wie genau mache ich jetzt aus der *.asm eine *.hex ?
Du startest das AVR-Studio. Da drin tippst du den Quelltext. Dann gibts oben
einen Button zum assemblen. Damit erzeugst du die .hex-Datei.
Das ist der Button mit den "zwei blauen Pfeilen nach unten in den Topf" ;)

Würde denn so meine Anweisung auch klappen mal rein von der Syntax her?
ja. Würde passen. Ist aber äußerst einfach gestrickt ;)

Dein Beispiel ist sehr gut nur vom Verständniss her komm ich ab dem Sprungbefehl "loop" nicht mehr mit :)
AVR ATmega - Wie fange ich an - Der Einstieg
Da hab ich mal Assembler recht einfach versucht zu erklären. Mußt du nur
auf dein Board und den Mega32 umsetzen (Ports und Definitionsdatei).
Hier im FAQ-Bereich hat sich auch schon einiges angesammelt. Oldmax hat
da letztens auch nen riesen Text für Assembler reingestellt.

Beim Pollin-Board ... Paß auf das du die Pins beim PortD wo die Taster
dransitzen nicht auf Ausgang schaltest. Dann himmelst du dir sonst die
Ausgangstreiber des Atmels wenn du dann nen Taster drückst.
; PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0
; Buz Ld2 Ld1 T3 T2 T1 TxD RxD
Bei den rot markierten Pins kommen dir Spannungen von den Tastern oder
vom RS232-Treiber (MAX232) entgegen. Also diese Pins auf EINGANG schalten.

DDRD muß also auf 11100010 gesetzt werden. WICHTIG !

Gruß
Dino
 
Hi
Schau mal in die FAQ's dort findest du ein wenig Hilfe. Zu den Befehlen, die in der Schleife stehen, findest du die Erklärung in AVR-Studio. Einfach mal Assembler HIlfe anklicken und den Befehl, den du nicht verstehst in das Suchfeld eingeben.
Du mußt dir eines vom Grundsatz her merken, kein Controller versteht das, was du schreibst. Es muß ihm erst einmal übersetzt werden. Das liegt einfach daran, das er ja nur 2 Zustände kennt, einmal Spannung liegt an = 1 und Spannung ist weg = 0. Das ganze ist dann in einem Byte 8, bzw. in einem Wort 16 mal nebeneinander angeordnet, so das ein Muster entsteht. Und nur dieses Muster kann ein Controller verarbeiten. Befehle wie LD oder RJMP versteht er nicht, genausowenig wie du die Bitmuster verstehen würdest. Also gibt es da irgendwo ein Feld "assemble" in Studio und das übersetzt dein Programm. Gleichzeitig wird geprüft, ob alles passt, also, die Sprung- und Adressmarken auch vorhanden sind und der Befehlssyntax eingehalten wurde. Erst wenn dann keine Fehlermeldungen mehr da sind, kannst du dein Programm auf den Chip flashen. Das heißt aber nicht, das es auch funktioniert, denn den Ablauf kannst nur du kontrollieren.
Gruß oldmax
 
Hi
Hab grad noch mal ein paar Beiträge überflogen und hab hier noch etwas zuzufügen. Was aus deinem kleinen Programm nicht hervorgeht, das du den Stack initialisiert hast. Bei Assembler dringend erforderlich. Bei BASCOM nehme ich an, das BASCOM das erledigt. Lies mal, was ich zu Assembler geschrieben habe. Da sind sicherlich nützliche Infos dabei, wobei ich nicht garantiere, den ein- oder anderen Fehler eingebaut zu haben. Sobald ich etwas Zeit habe, werde ich das gesamtprogramm einmal in einen Atmega8 flashen und prüfen. Dann kann's geliefert werden. Da es sich aber an kein Projekt bindet, ist's halt nur ein lauffähiger Code, der lediglich die Verbindung zu OpenEye liefert. Für weitere Inhalte ist aber reichlich Platz....
Gruß oldmax
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)