Workshop: Programmierung in Assembler (Atmel ATM8)

Workshops von Usern dieses Forums angeboten.
Benutzeravatar

samson
InterRegioExpress (IRE)
Beiträge: 373
Registriert: Di 12. Mai 2009, 13:53
Nenngröße: H0
Stromart: AC
Steuerung: CS2 CS1r CdB
Gleise: Vitrine ;-)
Wohnort: Rheinhessen

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#26

Beitrag von samson »

Moin,
Ferenc hat geschrieben:Hi,
wurde hier glaube ich erklärt:

Alle Pins von Port B sollen als Ausgang dienen -> es müssen alle Bits in DDRB gesetzt werden.
Code:
ldi r16, 0xFF ;alle Bits setzen
out ddrb, r16 ;Inhalt von r16 (alle gesetzten Bits) ins Steuerregister DDRB schreiben

liege ich hier richtig ? Im Beispiel oben halt mit dem Port B statt Port D.

Ferenc
sehe ich auch so, genau an der Stelle ist das die Begründung.

Ich denke zu Anfang muss man sich klar machen was man will, ob eben Ein- oder Ausgang, nur man muss es dann richtig festlegen mit 0xFF oder auch 0b11111111 und sich dabei nicht vertun mit 0x00 oder 0x00000000 (schreibt man das auch in binär so richtig?)
Gruß
Christoph

CS3+ 1.2.0 // CS2 4.1.0 // CS1 Aufgeladen 4.1.0 // MS2 // MS1 // 6021 // CAN-digital-Bahn by TM // Vitrinenbahner // Ausprobierer

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#27

Beitrag von Muenchner Kindl »

Hallo,

nachdem die ersten Pakete bereits bei der Post liegen möchte ich jetzt ein wenig auf das AVR-Studio eingehen.
Ich habe einen der bestellten AVR-Programmer aufgemacht, um den Packungsinhalt zu begutachten, da liegt eine CD bei und ich gehe mal davon aus, dass da auch das AVR Studio drauf ist.

Ihr könnt Euch die Software auch beim Hersteller herunterladen, hier die Links:
AVR Studio 4
AVR Studio 5
Leider muss man sich dafür registrieren, wenn jemand eine andere, bitte sichere, Quelle kennt würde ich mich über Links freuen.

Ich selbst verwende übrigens noch die Version 4, welche für den Workshop ausreicht. Allerdings wird diese nicht mehr weiterentwickelt, zukünftige Controller werden wohl nicht mehr von der 4 unterstützt, dafür soll die Version 5 nicht gerade sparsam mit den Ressourcen des PC umgehen. Da ich also die Version 4 nutze werde ich auch nur von dieser schreiben, wesentliche Unterschiede sind allerdings nicht zu erwarten. Beide Versionen gibt es übrigens nur in Englisch.

Installation:
Im Prinzip eine ganz normale Installation eines Windowsprogramms mit den üblichen Fenstern und Abfragen. Bitte achtet darauf, dass der Programmer AVR ISP nicht mit dem PC verbunden sein darf!
Irgendwann werdet Ihr gefragt, ob auch der USB-Treiber für den AVR ISP installiert werden soll, hier antwortet Ihr natürlich mit JA! Das darauf erscheinende DOS-Fenster ist normal und verschwindet von selbst wieder, bitte nicht eingreifen.
Nach der Installation von Software und Treiber könnt Ihr den Programmer via USB verbinden, der wird dann erkannt und Ihr könnt die Installation des Gerätes endgültig abschliessen.

Inbetriebnahme:
Ist die Software installiert, der Programmer im System eingebunden und die UL-E an einer Spannungsquelle angeschlossen, dann dürft Ihr den 6-poligen Stecker des AVRISP mit der Bastelbuchse der UL-E verbinden. Ein Verpolen ist nicht möglich (ausser mit Hilfe einer Feile). Wenn auf/in dem Programmer zwei grüne LEDs leuchten, dann ist schonmal alles korrekt.
Die UL-E wurden übrigens alle von mir getestet und mit einem Programm versehen. An Spannung angeschlossen müssen alle LEDs leuchten, wird einer der Taster betätigt geht eines aus. Bitte die Basteladapter mit Gefühl benutzen, eigentlich war eine andere Lösung angedacht... Zum Trennen bitte nur am Kunststoff angreifen, nicht an den Kabeln ziehen, dann sollten die Lötstellen (eine kalte sollte nicht dabei sein) halten.
Es kann übrigens sein, dass ein Programm nicht funktioniert wenn die Schaltung (egal ob UL-E oder was anderes) mit dem Programmer verbunden ist, letzterer aber nicht mit dem PC!

Nun, wenn dann alle LEDs leuchten könnt Ihr Euer AVR Studio aufrufen und bekommt normalerweise dieses Dialogfenster:
Bild
(natürlich ohne den Fliegendreck, aber die Welt muss ja nicht wissen, was ich alles mache ;) )
Mit dem Haken unten links lässt sich das auch ausschalten.

Solange es noch kein Projekt gibt klickt Ihr natürlich auf "New Project" und kommt dann zum nächsten Dialog:
Bild
Hier wählen wir links den "ATMEL AVR Assembler" aus und vergeben rechts einen Namen. Das Initialfile füllt sich selbst aus, sinnigerweise lassen wir das so. Unter "Location" wählt Ihr bitte ein Verzeichnis aus, in das das Projekt angelegt werden soll. In das Verzeichnis wird dann ein Ordner mit dem entsprechenden Namen angelegt, darin befinden sich dann die Dateien für das Projekt.

Klicken wir dann auf Next>> kommt der nächste Dialog:
Bild
Hier möchte das Programm wissen, welcher Simulator zu verwenden ist. Bitte links "AVR Simulator" und rechts "ATMega8" auswählen und dann auf "Finish" klicken.

Anschliessend kommt unsere Arbeitsoberfläche:
http://www.bahnhistorie.de/workshop/Studio_4.jpg
(Bild zu gross, wird noch geändert)

Wenn alles funktioniert und korrekt angeschlossen ist können wir auf das rechte der beiden Symbole, welches einen Chip mit der Aufschrift "AVR" darstellt, klicken.
Bild
Hier bitte bei "Device and Signature Bytes" ATMega 8 auswählen, unten muss ISP Mode stehen. Wenn Ihr nun auf "Read Signature" klickt, dann sollte die Signatur eingelesen werden.

Wenn Ihr auf den Reiter "Programm" klickt schaut das so aus:
Bild
Hier gebt Ihr unter "Flash" an, wo sich die compilierte Hex-Datei befindet und könnt mit dem Button "Program" Euer Programm in den Controller laden.
Das Ding wird oben rechts über das X geschlossen.

Die anderen Reiter, vor allem die Fuses, bitte in Ruhe lassen! Schauen könnt Ihr, aber bitte nichts verändern! Im schlimmsten Fall könnt Ihr dort Eueren Controller in einen Zustand bringen, in dem er nicht mehr über den Programmer ansprechbar ist!

Bis Ihr Euere Hardware in den kommenden Tagen habt werden wir hier noch ein kleines Projektchen durchziehen, damit Ihr bald das erste Programm laden könnt.

Bis dahin... schönes Restwochenende ;)

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#28

Beitrag von Muenchner Kindl »

Hallo,
Alle Pins von Port B sollen als Ausgang dienen -> es müssen alle Bits in DDRB gesetzt werden.
Code:
ldi r16, 0xFF ;alle Bits setzen
out ddrb, r16 ;Inhalt von r16 (alle gesetzten Bits) ins Steuerregister DDRB schreiben

liege ich hier richtig ? Im Beispiel oben halt mit dem Port B statt Port D.
Hier liegst Du absolut richtig, ebenso Christop mit:
0xFF oder auch 0b11111111 und sich dabei nicht vertun mit 0x00 oder 0x00000000 (schreibt man das auch in binär so richtig?)
ja, die Binärschreibweise ist korrekt :)

Wenn ein Port unterschiedlich genutzt werden soll (z.B. PB0-PB2=Eingang, PB3-PB7=Ausgang) ist es übrigens übersichtlicher, die DDR-Register in Binärschreibweise zu befüllen (hier wäre es 0b11111000).

OT:
das glaube ich zwar nicht aber ...wäre es möglich über alle Komponenten eine Rechnung zu bekommen oder jeweils die einzelnen? Ich kann es von der Steuer absetzen
Da ich die Komponenten als Firma bestelle und auch so verbuche geht das leider nicht.

Als nächstes beschäftigen wir uns damit, was wir alles tun müssen, um ein lauffähiges Programm zu schreiben... ich denke mal morgen oder übermorgen... ;)
Benutzeravatar

samson
InterRegioExpress (IRE)
Beiträge: 373
Registriert: Di 12. Mai 2009, 13:53
Nenngröße: H0
Stromart: AC
Steuerung: CS2 CS1r CdB
Gleise: Vitrine ;-)
Wohnort: Rheinhessen

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#29

Beitrag von samson »

Hallo Thomas,
Muenchner Kindl hat geschrieben:Leider muss man sich dafür registrieren, wenn jemand eine andere, bitte sichere, Quelle kennt würde ich mich über Links freuen.
Darüber haben sich schon andere geärgert und uns die Arbeit abgenommen: AVR Studio 5 Installer. Aber es dauert ein wenig: 602 MB :wink:
Muenchner Kindl hat geschrieben:OT:
das glaube ich zwar nicht aber ...wäre es möglich über alle Komponenten eine Rechnung zu bekommen oder jeweils die einzelnen? Ich kann es von der Steuer absetzen
Da ich die Komponenten als Firma bestelle und auch so verbuche geht das leider nicht.
Gut, dann geht das nicht, ist in Ordnung.
Gruß
Christoph

CS3+ 1.2.0 // CS2 4.1.0 // CS1 Aufgeladen 4.1.0 // MS2 // MS1 // 6021 // CAN-digital-Bahn by TM // Vitrinenbahner // Ausprobierer

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#30

Beitrag von Muenchner Kindl »

Guten Morgen,

nun sind alle bestellten UL-E und Zubehör unterwegs und damit Euch nach dem Auspacken nicht langweilig wird (ich gebe es ja zu, das Demoprogramm ist nicht wirklich spannend) kommt hier die erste Praxisaufgabe.

Es folgt nun der Assemblercode von dem Demoprogramm, welches bei Eueren UL-E aufgespielt ist:

Code: Alles auswählen

.include "m8def.inc"      ; Damit weis der Compiler, auf welchen Proz er compilieren muss


.org 0x0000
        rjmp    Init                  	; Springe nach einem Reset zum Label "Init"


Init:									; Hier beginnt die Initialisierung


		; Setzen des Stackpointers
        ldi     r16, LOW(RAMEND)     	; unteres Byte der hächstmöglichen Adresse holen
        out     SPL, r16				; Unteres Byte des SP beschreiben
        ldi     r16, HIGH(RAMEND)		; oberes Byte der höchstmnöglichen Adresse holen
        out     SPH, r16				; oberes Byte des SP beschreiben

		; Initialisieren der Eingänge
		ldi r16, 0x00					; alle Bits in r16 auf 0 setzen
		out ddrd, r16					; Alle Pins von Port D sind Eingang


		out portd, r16					; PullUp-Widerstände für PortD schalten

		; Initialisieren des Ausgangs
		ldi r16, 0xFF
		out ddrb, r16					; Alle Pins von Port B sind Ausgang
		
Hauptprogramm:
		in r16, pind					; Eingaberegister C nach r16
		out portb, r16					; Ausgabe von r16 nach Port B
		rjmp Hauptprogramm				; Endlosschleife
Ihr legt bitte ein neues Projekt an (s. oben) und kopiert Euch diesen Code ins Studio. Mit "F7" wird der Code compiliert (Der Compiler sollte unten "Assembly complete, 0 errors. 0 warnings" melden) und eine HEX-Datei im Projektverzeichnis erstellt.
Mit dem AVR-Button kommt Ihr dann zum ebenfalls beschriebenen Dialogfenster, da klickt Ihr dann auf den Reiter "Program"
Bild
Überprüft bitte im Abschnitt "Flash" den Pfad zur HEX-Datei, anschliessend klickt Ihr auf den Button "Program". Der Programmer sollte kurz flackern, danach ist das Programm in den Flash des ATM geladen.

Auch wenn es vielleicht augenscheinlich funktioniert, probiert das Programm bitte aus. Es wird nicht mehr wirklich so funktionieren wie das ursprüngliche Demoprogramm und Euere Aufgabe ist es, den Fehler zu suchen.

Ihr seht ein paar Zeilen, welche wir nicht besprochen haben, in diesen liegt der Fehler nicht. Bitte sucht den Fehler auch nicht trocken sondern wirklich erst dann, wenn Ihr das Equipment vor Euch habt und Ihr die Lösung auch in der Praxis testen könnt.

Die Anforderung ist, dass nach dem Einschalten alle LEDs leuchten müssen! Wird Taster 1 betätigt soll LED3 ausgehen, bei Taster 2 LED4 und wenn beide betätigt werden alle beide LEDs.

Viel Spass,

Thomas

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#31

Beitrag von Muenchner Kindl »

Grundsätzliches zum Aufbau eines Programms

Bisher haben wir uns ja in erster Linie mit ein paar Codezeilen beschäftigt und bisher hätte kein Compiler ein Programm daraus compilieren können, auch wenn die Aufgaben richtig gelöst waren.

Es gibt Dinge, die müssen enthalten sein, andere wiederum erleichtern uns das Programmieren, bzw. die Übersicht zu behalten.

Definitionsfile
Für den Compiler des ARV-Studio ist es z.B. unentbehrlich zu wissen, auf welchen Prozessor der Code compiliert werden muss, bzw. wie z.B. dessen Ports ect. definiert sind. Diese Information teilen wir dem Compiler mit folgender Zeile mit:

Code: Alles auswählen

.include "m8def.inc"
m8def.inc ist eine Datei, welche in folgendem Verzeichnis enthalten sein muss:
C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes
Im Prinzip handelt es sich dabei um ein Unterprogramm, welches in unser Projekt mit eingebunden wird und welches die Spezifikationen des jeweiligen Prozessors für den Compiler definiert. Bitte achtet darauf, dass Ihr immer das passende Definitionsfile verwendet, für den ATM8 ist es eben die Datei "m8def.inc", wenn wir einen ATM64 programmieren, dann ist das "m64def.inc".
Man kann diese Dateien auch mit einem Editor öffnen (bitte nicht darin herumeditieren) und da steht ganz oben, wozu die jeweilige Datei einzubinden ist:
m88def.inc hat geschrieben:;***************************************************************************
;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y
;*
;* Number : AVR000
;* File Name : "m88def.inc"
;* Title : Register/Bit Definitions for the ATMEGA88
;* Date : 14.01.2004
;* Version :
;* Support E-mail : avr@atmel.com
;* Target MCU : ATMEGA88
Hier sehen wir auch gleich eine Eigenschaft des AVR-Studio, die wir schon ein paarmal angesprochen haben, nämlich das Kommentieren:
Alles, was innerhalb einer Zeile nach einem Semikolon kommt ist ein Kommentar und wird nicht compiliert. Ein Kommentar kann zu Beginn einer Zeile stehen oder einem Befehl folgen.

Code: Alles auswählen

; Dies ist mein erstes Assemblerprogramm
Am Anfang macht es durchaus Sinn, ein paar Informationen hinter die Strichpunkte zu schreiben, das darf gerne ein wenig ausführlicher sein.
Hier z.B. der Header des Quellcodes für den RC-Link:

Code: Alles auswählen

;Projekt: 			RC-Link
;offizieller Name:	RC Link
;Version: 			1.3
;Status: 			freigegeben
;Autor:				Thomas Wyschkony
;Kurzbeschreibung: 	redundante Daten von RS485-Bus einlesen, uebersetzen und bei Aenderung an RS232 ausgeben
;Zusatz:			Erkennung der Aufgleisrichtung
;System:			Atmel ATM162
;Zusatz:			Unterstuetzung von Matrixdisplay EADOG162

Code: Alles auswählen

ldi r16, 0xFF   ; Register 16 mit 0xFF für PortB als Ausgang laden
Seid nicht geizig mit Kommentaren und selbst wenn es beim Programmieren selbst immer klar ist was die jeweilige Zeite wirklich macht, spätestens eine Woche später habt Ihr keine Ahnung mehr, warum da 0xFF ins Register r16 geladen wird... versprochen!

Kommen wir dann zu einem etwas sperrigen, fürchterlich klingenden Begriff, der Interuptvektortabelle. Ein Interupt ist ein Ereignis, welches entweder von aussen (Hardwareinterupt) oder von innen (Softwareinterupt) eintritt. Dieses Ereignis bewirkt, dass der aktuelle Befehl abgearbeitet wird und dann die zum jeweiligen Interupt vordefinierte Adresse in der Interuptvektortabelle in den Programmzähler geladen wird.
Lasst Euch bitte nicht von dieser gruseligen Beschreibung verunsichern, wir werden auf dieses Thema noch detailierter eingehen.
Der wichtigste und bekannteste Interupt, ein Hardware-Interupt, ist der RESET. Der Reset wird ausgelöst, wenn an entsprechendem Pin des Bausteins der entspechende Pegel anliegt, beim ATM8 wird dazu eine 0 an Pin 1 erwartet.
Tritt dieses Reset-Ereignis ein, wird also der Reset-Interupt ausgelöst, dann springt der Programmzähler sofort auf die Adresse 0x0000 im Flash.
(im Gegensatz zu anderen Interupts wird beim Reset kein Befehl mehr fertig abgearbeitet!)
Sinnigerweise steht genau an dieser Adresse 0x0000 ein unbedingter Sprungbefehl zum eigentlichen Programmanfang.
Die Interupt-Vektortabelle für den ATM8 findet Ihr übrigens im Datenblatt auf Seite 46. Da steht übrigens auch, dass der Reset auch über die Software ausgelöst werden kann, auf den Watchdog werden wir aber nicht weiter eingehen.
Um dafür zu sorgen, dass nach einem Reset zum Programmanfang gesprungen wird müssen wir folgendes zu Beginn schreiben:

Code: Alles auswählen

.org 0x0000
        rjmp    Init                     ; Springe nach einem Reset zum Label "Init"
Wörtlich übersetzt steht hier, dass wir an die Speicheradresse 0x0000 den Sprungbefehl zum Label "Init" schreiben.


In der Regel gibt es bei Mikrocontrollern kein wirkliches Programmende. Meist soll ja ständig etwas eingelesen, ausgewertet und ausgegeben werden, oder das Programm wartet auf ein Ereignis, eine Situation und reagiert darauf. Aus diesem Grund wird das eigentliche Programm meist als Endlosschleife ausgeführt sein, am Ende wird also wieder zum Anfang des Hauptprogramms (nicht zum Initialisieren) gesprungen.
Wie bei der Interuptvektortabelle geschieht dies durch einen unbedingten Sprung und auch wenn wir die Sprungbefehle erst nächste Woche beleuchten werden möchte ich hier mit dem einfachsten Sprungbefehl vorgreifen:

Code: Alles auswählen

rjmp Hauptprogramm
springt ohne weitere Bedingung zum Label "Hauptprogramm". In Wirklichkeit ermittelt der Compiler die Einsprungadresse des Labels "Hauptprogramm" und schreibt diese beim Aufruf des rjmp-Befehls in den Programmcounter.

So könnte z.B. ein Hauptprogramm aussehen, welches die Signale, welche an einem Port anliegen einfach am anderen Port ausgeben:

Code: Alles auswählen

;Initialisierung ist erledigt, ab hier startet das Hauptprogramm

Hauptprogramm:
in r16, pinb      ;Einlesen von PortB nach Register 16
out portc, r16  ;Ausgeben von r16 nach Port C
rjmp Hauptprogramm;   springe zum Anfang
Soll ein Programm terminiert, also wirklich beendet werden, dann machen wir das auch mit einer Endlosschleife. Soll z.B. der Eingabeport nur einmal eingelesen und an den Ausgabeport ausgegeben werden, dann sieht das so aus:

Code: Alles auswählen

;Initialisierung haben wir schon gemacht wir sind ja fleissig

Hauptprogramm:
in r16, pinb      ;Einlesen von PortB nach Register 16
out portc, r16  ;Ausgeben von r16 nach Port C

Programmende:
rjmp Programmende
Der Sprungbefehl lädt also immer seine eigene Adresse in den Programmzähler, damit läuft das Programm nicht in den undefinierten Bereich des Flash.

Etwas, was wir zwar erstmal nicht brauchen aber dennoch nicht ausser Acht lassen sollten, ist die Definition des Stapelspeichers. Den Stack und seinen Stackpointer haben wir ja schonmal angesprochen, wir definieren ihn möglichst zum Anfang des Programms, und zwar in dem Bereich, den wir als "Initialisieren" bezeichnen.
Der Stackpointer ist ein 16 Bit grosses Register, welches wir nicht direkt beschreiben können, wir müssen also wieder ein Arbeitsregister hinzuziehen.
Zunächst ermitteln wir das untere Byte der höchstmöglichen SD-RAM-Adresse und schreiben diese in das Arbeitsregister. Anschliessen schreiben wir dessen Inhalt in das Lower Byte des Stackpointers:

Code: Alles auswählen

        ldi     r16, LOW(RAMEND)        ; unteres Byte der hächstmöglichen Adresse holen
        out     SPL, r16            ; Unteres Byte des SP beschreiben
Anschliessend machen wir das mit dem höheren Byte der höchstmöglichen SD-RAM-Adresse:

Code: Alles auswählen

        ldi     r16, HIGH(RAMEND)      ; oberes Byte der höchstmnöglichen Adresse holen
        out     SPH, r16            ; oberes Byte des SP beschreiben
Den Stackpointer brauchen wir spätestens dann, wenn wir mit Unterprogrammen und Interupts arbeiten, die Definition des Stack sollten wir aber von Anfang an machen.

Nun wissen wir in etwa, wie ein Assemblerprogramm aufgebaut ist und so sollten wir für die ersten Praxisanwendungen gerüstet sein. Die erste Praxisaufgabe steht ja an, und als nächstes packen wir uns Logik und Arithmetik, sowie einige Bit-Operationen.
Benutzeravatar

kaeselok
ICE-Sprinter
Beiträge: 6785
Registriert: Mo 30. Apr 2007, 13:15
Nenngröße: 1
Stromart: digital
Steuerung: ECoS II / TAMS
Gleise: Hübner nach NEM
Wohnort: Brühl

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#32

Beitrag von kaeselok »

Hallo Thomas,

beruflich bedingt kam ich erst am Wochenende dazu mich in die Materie einzulesen. Bin schon sehr auf das Test-Equipment gespannt!

Nachdem ich - glaube verstanden zu haben - wie das mit den I/O-Ports funktioniert frage ich mich die ganze Zeit ob man mit so einem Atmel Controller nicht auch eine Art "S88" bauen könnte?!

Was noch fehlt ist die Verbindung des Atmels zum PC via RS232 oder USB.

Ist nur so ein Gedanke der mir gerade durch den Kopf ging ... :wink:


Viele Grüße,

Kalle

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#33

Beitrag von Muenchner Kindl »

Hallo Kalle,
frage ich mich die ganze Zeit ob man mit so einem Atmel Controller nicht auch eine Art "S88" bauen könnte?!

Was noch fehlt ist die Verbindung des Atmels zum PC via RS232 oder USB.
Im Prinzip und eigentlich auch in der Praxis ist das möglich. Der ATM8 hat eine RS232-Schnittstelle integriert, diese ist aber nicht herausgeführt und bedarf einer externen Beschaltung:
Der UART liefert nur 5V, die RS232 funktioniert aber mit 24V. Dafür gibt es mit dem Baustein MAX232 eine preiswerte und einfache Lösung.
Allerdings werden wir auf die RS232 nicht eingehen, wer aber mit Steuerregistern umgehen kann kann auch den UART einrichten.
Eine ausführliche Beschreibung gibt es im Tutorial.

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#34

Beitrag von Muenchner Kindl »

Guten Morgen,

Kleiner Tipp zur Lösung der ersten Praxisaufgabe:
Schaut Euch bitte die Gegebenheiten/Vorgaben der Hardware im ersten Beitrag des ws an und lest auch die Kommentare im fehlerhaften Programm ;-)
Benutzeravatar

samson
InterRegioExpress (IRE)
Beiträge: 373
Registriert: Di 12. Mai 2009, 13:53
Nenngröße: H0
Stromart: AC
Steuerung: CS2 CS1r CdB
Gleise: Vitrine ;-)
Wohnort: Rheinhessen

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#35

Beitrag von samson »

Hallo Thomas,

habe heute dein Paket bekommen. Danke für die schnelle Sendung.

Den AVR Programmer mit dem PC verbunden. Da ich das AVR Studio schon installiert hatte kam die Meldung der erfolgreichen USB Verbindung sehr schnell.

Danach die Lichtsteuerplatine UL mit dem Programmer verbunden und dann AVR Studio gestartet. Klappt alles.

Nur eine Frage: der AVR Programmer soll eine neue Firmware bekommen. Soll ich oder muss ich sogar um damit arbeiten zu können?
Gruß
Christoph

CS3+ 1.2.0 // CS2 4.1.0 // CS1 Aufgeladen 4.1.0 // MS2 // MS1 // 6021 // CAN-digital-Bahn by TM // Vitrinenbahner // Ausprobierer

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#36

Beitrag von Muenchner Kindl »

Hallo Christoph,
der AVR Programmer soll eine neue Firmware bekommen. Soll ich oder muss ich sogar um damit arbeiten zu können?
Welche Version vom Studio hast Du installiert? Evtl. hängt das damit zusammen, ich musste bei mir (Studio4) kein Update durchführen.

Ich denke mal, dass gegen ein FW-Update nichts einzuwenden ist.
Benutzeravatar

samson
InterRegioExpress (IRE)
Beiträge: 373
Registriert: Di 12. Mai 2009, 13:53
Nenngröße: H0
Stromart: AC
Steuerung: CS2 CS1r CdB
Gleise: Vitrine ;-)
Wohnort: Rheinhessen

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#37

Beitrag von samson »

Ich habe die 5er Version installiert. Irgendwie hatte ich gedacht ich nehme mal die neuere...

Kann man eigentlich die Firmware Version auslesen? Eigentlich hatte ich gedacht genau das zu tun, erst auslesen, aber es kam sofort die Updateaufforderung, nachdem ich auf das Menü Tools -> AVR Programming ging, dachte es geht damit. Lässt sich aber ohne Update beenden.

Edit: Habe eben noch mal genau geschaut: es heisst Upgrade und nicht Update, soll ja korrekt bleiben wenn die Firmware gemeint ist :roll: :?
Gruß
Christoph

CS3+ 1.2.0 // CS2 4.1.0 // CS1 Aufgeladen 4.1.0 // MS2 // MS1 // 6021 // CAN-digital-Bahn by TM // Vitrinenbahner // Ausprobierer
Benutzeravatar

samson
InterRegioExpress (IRE)
Beiträge: 373
Registriert: Di 12. Mai 2009, 13:53
Nenngröße: H0
Stromart: AC
Steuerung: CS2 CS1r CdB
Gleise: Vitrine ;-)
Wohnort: Rheinhessen

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#38

Beitrag von samson »

So, habe mal genauer geschaut.

Es geht um die Firmwareversion des Programmers. Es wird nach erfolgtem Upgrade angezeigt, das der AVRISP mkII auf dem neuesten Stand ist. Scheinbar wird mit AVR5 eine Datei mitgeliefert, um das zu machen falls die angeschlossene Programmer Version einen älteren Firmwarestand hat.

Anschliessend kann ich einwandfrei unter Tools AVR Programming auswählen, das Interface (AVRISP) festlegen, den ATM Typ wählen und dann das Programm übertragen. Da wir aber ja noch nicht so weit sind lasse ich es mal lieber :oops:

Noch eine Frage: da ja die Lichtsteuerung fertig programmiert geliefert wird: kann ich dieses Programm sichern bevor ich eigene Progrämmchen übertrage? Würde ich gerne machen, um eine Sicherheitskopie zu haben ...
Gruß
Christoph

CS3+ 1.2.0 // CS2 4.1.0 // CS1 Aufgeladen 4.1.0 // MS2 // MS1 // 6021 // CAN-digital-Bahn by TM // Vitrinenbahner // Ausprobierer

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#39

Beitrag von Muenchner Kindl »

Hallo
samson hat geschrieben:So, habe mal genauer geschaut.

Da wir aber ja noch nicht so weit sind lasse ich es mal lieber :oops:

Noch eine Frage: da ja die Lichtsteuerung fertig programmiert geliefert wird: kann ich dieses Programm sichern bevor ich eigene Progrämmchen übertrage? Würde ich gerne machen, um eine Sicherheitskopie zu haben ...
Nun, im Prinzip sind wir schon so weit, Du darfst gerne loslegen ;)

Das jeweils auf dem MC gespeicherte Programm ist, sofern es nicht geschützt ist, auslesbar.
Bild
Einfach im Abschnitt "Flash" auf Read klicken und ein Ziel auswählen. Allerdings ist das nur das Hexfile in Mnemocode, also für uns eigentlich nicht interpretierbar. Ein "Zurückcompilieren" dürfte möglich aber extrem aufwändig sein.
Auf den ausgelieferten Platinen befindet sich nur mein langweiliges Testprogramm. Den Quellcode findest Du, wenn auch mit einem Fehler ;) in der verlinkten Praxisaufgabe.

Ferenc
Metropolitan (MET)
Beiträge: 3257
Registriert: Mo 26. Sep 2005, 23:35
Nenngröße: H0
Stromart: AC
Steuerung: Ecos 1 + Tams MC + TC Gold
Gleise: Märklin M-K-C Gleis
Wohnort: HDH
Alter: 56

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#40

Beitrag von Ferenc »

Hi,
in der Aufbau und Funktionsanleitung des UL ist auf der Seite 15 unter "Anschluss von externen Tastern und Drehreglern" wohl ein Fehler drin.
Dort steht: Taster oder Reedschalter können an die klemmen E1 - und E2 - angeschlossen werden.
Im Bild sind die Taster und Schalter aber an E3 - und E4 - angeschlossen.
Weiter steht das ein Potentiometer an den Klemmen + E4 - und + E3 - angeschlossen werden kann.
Im Bild ist aber der Poti an + E1 - angeschlossen.
Würde sagen das hier das Bild stimmt und der Text falsch geschrieben ist, oder ?

Ferenc
Immer eine Handbreit Schotter unter der Schwelle ;-)

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#41

Beitrag von Muenchner Kindl »

Guten Morgen Ferenc,
Im Bild ist aber der Poti an + E1 - angeschlossen.
Würde sagen das hier das Bild stimmt und der Text falsch geschrieben ist, oder ?
Habe mir extra eine Platine samt Beschreibung mit ins Büro genommen... Du hast Recht. Die untere Abbildung auf S.15 ist falsch, die externen Kontakte werden an E1 und E2 angeschlossen, während Potis (oder ebenfalls Kontakte) an E3 und E4 angeschlossen werden. Korrekt ist dies aus dem Schaltplan ersichtlich, ich werde das dem Hersteller mitteilen und bedanke mich für den Hinweis.

Eine Anmerkung zum Workshop selbst habe ich noch:
Das nächste Thema wird recht umfangreich werden (viel zum Schreiben für mich und viel zum Lesen für Euch ;) ) und so frage ich mal in die Runde, ob ich das kommendes Wochenende durchziehen oder noch eine Woche warten soll. Ich habe dann auch ein wirkliches Projekt als Aufgabe vorgesehen, es sollte also sichergestellt sein, dass das Equipment vorhanden ist und funktioniert, ebenso sollten die bisherigen Themen, insbesondere I/O und Register weitestgehend verinnerlicht sein.
Mit den Bitoperationen, Logik und Arithmetik (evtl. schiebe ich letzteres auch später nach) kommt ein dicker Brocken auf uns zu, ohne den aber vieles nicht möglich ist.
Benutzeravatar

kaeselok
ICE-Sprinter
Beiträge: 6785
Registriert: Mo 30. Apr 2007, 13:15
Nenngröße: 1
Stromart: digital
Steuerung: ECoS II / TAMS
Gleise: Hübner nach NEM
Wohnort: Brühl

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#42

Beitrag von kaeselok »

Muenchner Kindl hat geschrieben:... und so frage ich mal in die Runde, ob ich das kommendes Wochenende durchziehen oder noch eine Woche warten soll.
Ich plädiere für eine Woche warten. Dann können wir in Ruhe unser neues Spielzeug ausprobieren und sind dann nächste Woche fit für alle Schandtaten! :D


Viele Grüße,

Kalle

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#43

Beitrag von Muenchner Kindl »

kaeselok hat geschrieben:
Muenchner Kindl hat geschrieben:... und so frage ich mal in die Runde, ob ich das kommendes Wochenende durchziehen oder noch eine Woche warten soll.
Ich plädiere für eine Woche warten. Dann können wir in Ruhe unser neues Spielzeug ausprobieren und sind dann nächste Woche fit für alle Schandtaten! :D


Viele Grüße,

Kalle
Vorschlag: Nachdem es ja bisher nicht so viel zum Spielen gibt würde ich am Wochenende das dafür geplante Thema durchführen und dann zwei Wochen Pause machen.
Dann habt Ihr nämlich wirklich etwas zum Ausprobieren ;)
Benutzeravatar

kaeselok
ICE-Sprinter
Beiträge: 6785
Registriert: Mo 30. Apr 2007, 13:15
Nenngröße: 1
Stromart: digital
Steuerung: ECoS II / TAMS
Gleise: Hübner nach NEM
Wohnort: Brühl

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#44

Beitrag von kaeselok »

Muenchner Kindl hat geschrieben:Vorschlag: Nachdem es ja bisher nicht so viel zum Spielen gibt würde ich am Wochenende das dafür geplante Thema durchführen und dann zwei Wochen Pause machen.
Dann habt Ihr nämlich wirklich etwas zum Ausprobieren ;)
Das ist akzeptabel! :wink:

(ich komme ohnehin erst am Wochenende zu einem intensiveren Einarbeiten ...)

Frage (weil sie mir grad durch den Kopf schießt):
Die Software und der Treiber der da vielleicht installiert werden muss ... das Zeugs läuft auch auf Windows 7 x64?


Besten Dank und viele Grüße,

Kalle
Benutzeravatar

samson
InterRegioExpress (IRE)
Beiträge: 373
Registriert: Di 12. Mai 2009, 13:53
Nenngröße: H0
Stromart: AC
Steuerung: CS2 CS1r CdB
Gleise: Vitrine ;-)
Wohnort: Rheinhessen

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#45

Beitrag von samson »

:shock:
kaeselok hat geschrieben:
Muenchner Kindl hat geschrieben:Vorschlag: Nachdem es ja bisher nicht so viel zum Spielen gibt würde ich am Wochenende das dafür geplante Thema durchführen und dann zwei Wochen Pause machen.
Dann habt Ihr nämlich wirklich etwas zum Ausprobieren ;)
Das ist akzeptabel! :wink:

(ich komme ohnehin erst am Wochenende zu einem intensiveren Einarbeiten ...)

Frage (weil sie mir grad durch den Kopf schießt):
Die Software und der Treiber der da vielleicht installiert werden muss ... das Zeugs läuft auch auf Windows 7 x64?


Besten Dank und viele Grüße,

Kalle
Und wie! Habe hier Win7 x64 Ultimate, da geht es einwandfrei. Treiber- und Programminstallation liefen ohne Hakeln oder Nachbessern durch.

Ich bin auch für eine Woche warten, da ich am Samstag für eine Woche in Urlaub bin :D
Muenchner Kindl hat geschrieben:Auf den ausgelieferten Platinen befindet sich nur mein langweiliges Testprogramm. Den Quellcode findest Du, wenn auch mit einem Fehler :wink: in der verlinkten Praxisaufgabe.
Also sind die UL-Platinen eh nicht mehr im Lieferzustand wie sie in der beiliegenden Anleitung beschrieben sind? Dann ist es egal mit der Sicherung 8) Und kann direkt die Testaufgabe reinschieben, aber hoffentlich ohne Fehler
Gruß
Christoph

CS3+ 1.2.0 // CS2 4.1.0 // CS1 Aufgeladen 4.1.0 // MS2 // MS1 // 6021 // CAN-digital-Bahn by TM // Vitrinenbahner // Ausprobierer

emb
Regionalbahn (RB)
Beiträge: 36
Registriert: Mi 27. Sep 2006, 11:43
Nenngröße: H0
Stromart: AC
Steuerung: MoBaSbS + iTrain
Gleise: C-Gleis+Tillig H0e+m
Wohnort: Markgröningen

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#46

Beitrag von emb »

Hallo Thomas,
Muenchner Kindl hat geschrieben:...........

Ihr legt bitte ein neues Projekt an (s. oben) und kopiert Euch diesen Code ins Studio. Mit "F7" wird der Code compiliert (Der Compiler sollte unten "Assembly complete, 0 errors. 0 warnings" melden) und eine HEX-Datei im Projektverzeichnis erstellt.
Mit dem AVR-Button kommt Ihr dann zum ebenfalls beschriebenen Dialogfenster, da klickt Ihr dann auf den Reiter "Program"
Bild
Überprüft bitte im Abschnitt "Flash" den Pfad zur HEX-Datei, anschliessend klickt Ihr auf den Button "Program". Der Programmer sollte kurz flackern, danach ist das Programm in den Flash des ATM geladen.

Auch wenn es vielleicht augenscheinlich funktioniert, probiert das Programm bitte aus. Es wird nicht mehr wirklich so funktionieren wie das ursprüngliche Demoprogramm und Euere Aufgabe ist es, den Fehler zu suchen.

............................

Die Anforderung ist, dass nach dem Einschalten alle LEDs leuchten müssen! Wird Taster 1 betätigt soll LED3 ausgehen, bei Taster 2 LED4 und wenn beide betätigt werden alle beide LEDs.
Habe wie oben beschrieben den Quellcode in das AVR Studio kopuiert, kompiliert und übertragen.
Nach es für mich nicht nur augenscheinlich sondern wirklich so funktioniert hat wie es soll, habe "Erase Device" ausgeführt. Wenn ich nun das Prpgramm übertragen möchte kommt eine Meldung "ISP frequency must be 5kHz or above whenn programming EEPROM or FLASH!"

Das Programm wird nicht übertragen.


Gruß

Edgar
fahre mit MoBaSbS und iTrain auf Mä. C- Gleis + Tillig H0m u. H0e

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#47

Beitrag von Muenchner Kindl »

Hi,
Also sind die UL-Platinen eh nicht mehr im Lieferzustand wie sie in der beiliegenden Anleitung beschrieben sind?
Richtig. Aber, wenn da eines der Programme (UL1-UL3) drauf gewesen wäre könntest Du das auch nicht sichern, da die Prozessoren vom Hersteller kopiergeschützt kommen. Ja, das geht ;)
Ich bin auch für eine Woche warten,
Nun, persönlich wäre es mir schon recht, am kommenden Wochenende tätig zu werden. Ganz einfach, damit Ihr (zumindet die nicht in Urlaub dürfen :twisted: ) eine Grundlage zum Experimentieren und Spielen habt. Zwei Schalter einlesen und ein paar LEDs zum Leuchten bringen dürfte ja keine Herausforderung mehr sein.
Ich hätte halt am Wochenende einen grossen Brocken abgearbeitet und Euch dann zwei Wochen Zeit gegeben.

Problem ist ja auch, dass ich ja auch durchaus verhindert sein könnte. Wäre das übernächstes Wochenende so unglücklich, dann geht es noch eine Woche gar nicht weiter, das wäre schade. Und so dick wird der Brocken dann auch nicht werden ;)

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#48

Beitrag von Muenchner Kindl »

Hallo Edgar,

schau mal beim Programmierdialog auf den ersten Reiter "Main":
Bild

Unten muss ISP Mode ausgewählt sein, die Frequenz stellst Du mit Hilfe des Buttons "Settings" ein.
Benutzeravatar

samson
InterRegioExpress (IRE)
Beiträge: 373
Registriert: Di 12. Mai 2009, 13:53
Nenngröße: H0
Stromart: AC
Steuerung: CS2 CS1r CdB
Gleise: Vitrine ;-)
Wohnort: Rheinhessen

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#49

Beitrag von samson »

Hallo,
Muenchner Kindl hat geschrieben:Hi,
Also sind die UL-Platinen eh nicht mehr im Lieferzustand wie sie in der beiliegenden Anleitung beschrieben sind?
Richtig. Aber, wenn da eines der Programme (UL1-UL3) drauf gewesen wäre könntest Du das auch nicht sichern, da die Prozessoren vom Hersteller kopiergeschützt kommen. Ja, das geht ;)
Das hatte ich nun nicht gerade vor, den Herstellern geistiges Eigentum zu stehlen, sondern nur wenn wir noch nicht so schnell zu Assemblerprofis werden zwischendrin mal eine LED Show ablaufen zu lassen :oops:
Muenchner Kindl hat geschrieben:
Ich bin auch für eine Woche warten,
Nun, persönlich wäre es mir schon recht, am kommenden Wochenende tätig zu werden. Ganz einfach, damit Ihr (zumindet die nicht in Urlaub dürfen :twisted: ) eine Grundlage zum Experimentieren und Spielen habt. Zwei Schalter einlesen und ein paar LEDs zum Leuchten bringen dürfte ja keine Herausforderung mehr sein.
Ich hätte halt am Wochenende einen grossen Brocken abgearbeitet und Euch dann zwei Wochen Zeit gegeben.
Du bist der Master dieses Workshops und weisst am besten über deine Organisationmöglichkeiten bescheid.

Eines kommt noch als weiteres Argument hinzu: sacken lassen ist immer gut und probieren und probieren ebenso, und wenn du wie du sagst erst in 2 Wochen wieder frischen Inhalt einstellen willst können wir die Zeit auch fürs Üben nutzen.
Muenchner Kindl hat geschrieben:Problem ist ja auch, dass ich ja auch durchaus verhindert sein könnte. Wäre das übernächstes Wochenende so unglücklich, dann geht es noch eine Woche gar nicht weiter, das wäre schade. Und so dick wird der Brocken dann auch nicht werden ;)
Gut. Von mir aus dann her damit :shock:
Gruß
Christoph

CS3+ 1.2.0 // CS2 4.1.0 // CS1 Aufgeladen 4.1.0 // MS2 // MS1 // 6021 // CAN-digital-Bahn by TM // Vitrinenbahner // Ausprobierer

Threadersteller
Muenchner Kindl
Moderator
Beiträge: 10214
Registriert: Di 26. Apr 2005, 21:26

Re: Workshop: Programmierung in Assembler (Atmel ATM8)

#50

Beitrag von Muenchner Kindl »

Hallo,
Das hatte ich nun nicht gerade vor, den Herstellern geistiges Eigentum zu stehlen,
Nun, die Programme wurden im Auftrag programmiert und so bekommt der Hersteller bereits MCs mit Leseschutz. Ich habe das Demoprogramm aufgespielt, um sicher zu gehen, dass alles funktioniert. Da war keine Befürchtung vor irgendwelchem Missbrauch im Spiel.
Eines kommt noch als weiteres Argument hinzu: sacken lassen ist immer gut und probieren und probieren ebenso, und wenn du wie du sagst erst in 2 Wochen wieder frischen Inhalt einstellen willst können wir die Zeit auch fürs Üben nutzen.
Nun, viel zum Sacken gibt es ja noch nicht, wenn es aber notwendig wird können wir dieses kommende Thema auch gerne 3 Wochen sacken lassen. In den 3 Wochen kann natürlich vertieft und probiert werden, selbstverständlich stehe ich auch zur Verfügung, nur jetzt haben wir halt noch nicht so viel zum vertiefen und probieren. Wir bekommen die Daten rein und raus... das dürfte schnell langweilig werden. Am Wochenende klopfen wir uns Bitoparationen, Logik und ein bisschen Mathe ins Gehirn, da gibt es dann genug zu Kauen und da kann man dann auch eine Woche verzögern, ohne dass es ganz langweilig wird.
Antworten

Zurück zu „Workshops“