PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Avr-Studio - Vorlagen für neu erstellte Dateien



Pr0gm4n
14.01.2011, 13:07
Hallo zusammen,

ich habe die Tatsache dass wir uns in der Schule in Informatik mit Assembler beschäftigen zum Anlass genommen, mir mal AVR-Assembler anzuschaun.
Ist ja nicht sonderlich schwer, nur würde es mich jetzt interessieren ob ich für neu angelegte Dateien nicht gleich eine Vorlage vom AVR-Studio laden lassen kann... ist immer so umständlich den ganzen Sims wieder abzutippen oder aus den anderen Dateien zu laden...

Genauer gesagt geht es dabei um folgendes:

;.include "m8def.inc"
;.include "m32def.inc"

.org 0x000
rjmp Main
;.org INT0addr ; External Interrupt0 Vector Address
; rjmp INT0_interrupt
;.org INT1addr ; External Interrupt1 Vector Address
; rjmp INT1_interrupt
;.org OC2addr ; Output Compare2 Interrupt Vector Address
; rjmp OC2_interrupt
;.org OVF2addr ; Overflow2 Interrupt Vector Address
; rjmp OVF2_interrupt
;.org ICP1addr ; Input Capture1 Interrupt Vector Address
; rjmp ICP1_interrupt
;.org OC1Aaddr ; Output Compare1A Interrupt Vector Address
; rjmp OC1A_interrupt
;.org OC1Baddr ; Output Compare1B Interrupt Vector Address
; rjmp OC1B_interrupt
;.org OVF1addr ; Overflow1 Interrupt Vector Address
; rjmp OVF1_interrupt
;.org OVF0addr ; Overflow0 Interrupt Vector Address
; rjmp OVF0_interrupt
;.org SPIaddr ; SPI Interrupt Vector Address
; rjmp SPI_interrupt
;.org URXCaddr ; USART Receive Complete Interrupt Vector Address
; rjmp URXC_interrupt
;.org UDREaddr ; USART Data Register Empty Interrupt Vector Address
; rjmp UDRE_interrupt
;.org UTXCaddr ; USART Transmit Complete Interrupt Vector Address
; rjmp UTXC_interrupt
;.org ADCCaddr ; ADC Interrupt Vector Address
; rjmp ADCC_interrupt
;.org ERDYaddr ; EEPROM Interrupt Vector Address
; rjmp ERDY_interrupt
;.org ACIaddr ; Analog Comparator Interrupt Vector Address
; rjmp ACI_interrupt
;.org TWIaddr ; Irq. vector address for Two-Wire Interface
; rjmp TWI_interrupt
;.org SPMaddr ; SPM complete Interrupt Vector Address
; rjmp SPM_interrupt
;.org SPMRaddr ; SPM complete Interrupt Vector Address
; rjmp SPMR_interrupt

.org INT_VECTORS_SIZE
Main: ; hier beginnt das Hauptprogramm
.def tmp = R16
ldi tmp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
out SPH, tmp
ldi tmp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
out SPL, tmp
clr tmp


Wer sich mit Assembler auskennt, dem fällt vlt. auf dass das ganze relativ modular geschrieben ist, also bloß die Kommentare für die benötigten Sprungbefehle raus und schon kann man den Interrupt verwenden...

vlt. drunter im Hauptprogramm dann noch kommentiert die Anweisungen zur Aktivierung der Interrupts oder so

LG Roland

oberallgeier
14.01.2011, 13:45
Können kann man sicher immer. Was mir bei Deinem Schnippsel fehlen würde ist eine ganze Menge Beschreibung. Was soll das Programm, was ist das Target (der Controller alleine ist mir nicht genug Aussage etc.) etc.? Dabei muss ich sagen, dass das folgende Beispiel sicher nicht der Weisheit letzter Schluss ist.

Genau zu Deiner Aussage: ob AVRStudio einen File "main" selbst laden kann, weiß ich nicht, glaub ich nicht. Aber man kann ja unter [Edit Current Configuration Options] zusätzliche Files einbinden. Find ich nicht pfiffig, ich habe gerne ALLES in einer Projektdirectory. Ich kopiere (copy&paste) einen passenden File bzw. Auszuge davon aus einem passenden Projektdirectory in das Editorfenster im Studio. Mein Beispiel:


;================================================= ==================================
;========== Beachte: printout aus AVRStudio geht (nur) bis col 85 ==================
;* Target MCU : ATtiny13
;* Target Hardware : Servotester-Platine, Servo auf PB3, Poti auf PB4
;* Target cpu-frequ. : 9,6 MHz, interner Oszillator
;================================================= ==================================
;*Versionsgeschichte:
;====================
;x++ 19Sep10 2300 msges und msmin geändert - aber läuft nicht gut
;x1599 21jan08 12ff Version für die "Servoplatine" adaptiert
; dazu ISR+adc+servo1-x30-gut.asm abgeändert.
;
;* Aufgabenstellung
;* ISR zum Testen von einem Servo mit der Servotester-Platine
; Servo über getrennte Leitung, max. 1 A, vom Labornetzteil versorgt
; Portbelegung, Schaltung auszugsweise (übernomm. v. srv-adc+pwm-x29b.asm)
;
; Vcc(6V LNT) -----------------------------------------Vcc-Servo1
;
; Vcc -----------tiny13-Vcc
; |
; | tiny13-PB3=pin2----------------+---Signal-Servo1
; | |
; | + - - (poti1->ADC) - - +
; | |
; | tiny13-PB4--------+
; | V
; | +--------+
; +-------------------+ 25klin +----+
; +--------+ |
; |
; GND---------------------------------------+----------GND-Servo1
;
;* ===============================================
; ######### Original war: ISR+adc+servo1-x30-gut.asm
;================================================= ==================================
; Speicherbelegung
;r14 low-Byte der ADC-Wandlung (lsb)
;r15 high-Byte der ADC-Wandlung: Beide ergeben einen Wert zwischen 0...1023
;r16 Mehrzweck, high-Byte in Pausen "pause_an", "pause_aus", "led_ende" u.ä.
;r17 low-Byte in Pausen, s.o.
;
;r18 -- --
;r19 -- --
;r20 -- --
;
;r21 Byte Steuerbyte. Es werden nur Bits ausgewertet
; "Rampe" an-aus, 1=Rampe an, bit 1 = Servo 1 , bit 5 = Servo 2
; Übernahme Rampenwert, 1=Daten wurden noch nicht übernommen vom
; Hauptprogramm in die ISR, 0=ISR hat Daten abgeholt und zwar
; bit 2 = Servo 1 , bit 6 = Servo 2
;r22 1/2 Word lsb Zeitwert Rampe aus auf-ab-Rechnerei im Hauptprogramm
;r23 1/2 Word msb zu r26
;r24 1/2 Word LSB Zeitwert Rampe aus ADC/Poti im Hauptprogramm
;r25 1/2 Word MSB wird vom r14/15 geholt und zurechtgerechnet
;
;r26 1/2 Word LSB GESAMTDAUER Servoimpuls MUSS in r26/27 sein wegen sbiw
;r27 1/2 Word MSB Zeitwert für GESAMTDAUER Servoimpuls, etwa 500 Takte ?
;
;r28 1/2 Word lsb LSB RampenCOUNTER Servo1, wird in ISR runtergezählt
;r29 1/2 Word msb MSB Counter stammt vom ADC
;r30 1/2 Word lsb LSB Auf-ab-COUNTER Servo2, wird in ISR runtergezählt
;r31 1/2 Word msb MSB
;
;================================================= ==================================

#include "tn13def.inc"

; Interrupthandler-Tabelle (aus ATTiny13_doc2535.pdf, Seite 42)
; Address Code Labels ; Comments
.org 0x0000 rjmp anfang ; Reset Handler
;.org 0x0003 rjmp isr_x13 ;TIMO_OVF = Timer0 Overflow Handler

.org 0x0006 rjmp isr_ctc ; IRS für Timer0 CompareA Handler
;
;================================================= ==================================
; Deklarationen für den Praeprozessor
; Konstanten ####### evtl. auch keine Konstanten definiert
;
#define a r16 ;Kurzbezeichung für Allzweckregister r16
;
; Anschlussbelegung, vgl. srv-adc+pwm-x29b.asm
#define servo1 3 ;Servo 1 auf Port PB3
#define potiadc 2 ;Poti 1 am Port PB4 geht auf ADC-Kanal 2
;
;Festwerte und div. Daten für adcdat etc ====>
#define adcpsc 7 ; =7 ==> Clock/128, 9,6 MHz werden 75 kHz, vgl. doc, S93
;#define adcdat 3 ;Dummywert vom ADC ###>>> "Nur" 8Bit-Wandlung ! ? !
#define msges 5000 ;Gesamtzeit der Rampe: 5000 ISR-Zyklen sind 20 ms
#define mstest 1000 ;Test ergibt mit mstest 500 und tmprs 40: für 2,0 ms
; das heisst: 4 µs Interrupt-Abstand (Fehler +4%)
#define msmin 100 ;Minimalwert für Rampe: 0,5 ms
#define tmrprs 38 ;Preset im Timer-Register (hoffentlich für CTC)
;
;================================================= ==================================
; Hauptprogramm
;================================================= ==================================
;
anfang:
rcall mc_init ;Initialisiere den Mikrocontroller
rcall isr_ini ;Initialisiere die ISR
rcall adcinit ;ADC initialisieren
;
sei ; .. Interrupts allgemein zulassen im Hauptprogramm

Vielleicht hilfts Dir. Viel Erfolg.

Pr0gm4n
14.01.2011, 15:13
Hi,

zunächst danke für die schnelle Hilfe.
Ich weiß nicht, ob du mein Problem richtig erfasst hast, ich könnte aber auch deinen Post falsch interpretieren oder mich nicht klar ausgedrückt haben.

Ich möchte, das ich sobald ich auf "New File" klicke im Avr-Studio eine neue Datei aufgemacht wird, die schon den Inhalt von oben hat, also eine sog. Vorlage reinlädt in neue Dateien.

Dass das, was ich da oben im Post stehen hab keine non-plus-ultra-Vorlage ist, ist mir auch bewusst :-D
Ich bin in Sachen Assembler halt noch recht unerfahren und möchte mir die Vorlage im Verlauf des Tutorials zusammenschreiben, alles was ich für hilfreich erachte mit aufnehmen.

Vielleicht mach ich das auch einfach mit Vorlagedateien, die ich jeweils einbinde und je Projekt einzeln anpasse und damit ja auch im Projektdirektory habe :)

LG Roland

oberallgeier
14.01.2011, 17:12
... Genau zu Deiner Aussage: ob AVRStudio einen File "main" selbst laden kann, weiß ich nicht, glaub ich nicht ...Dachte ich hätte Dein Problem erfasst.

Pr0gm4n
14.01.2011, 17:33
Ok, dann hab ich das falsch interpretiert^^
tschuldige, ich hatte den satz so gedeutet dass du meinst ich will mit dem

rjmp Main

irrsinnigerweise irgend ne andere datei laden ;)
aber ich denke du kennst dich da besser aus als ich...
ich machs jetzt einfach so, dass ich mit .include "Atmega32.asm" die Vorlage für alle Grundeinstellungen zum Atmega32 lade, wie die Interruptsachen und so

danke nochmal.

LG Roland

Besserwessi
14.01.2011, 18:09
So viele neue Projekte fängt man normalerweise nicht an. Mich stört es da wenig das man ggf. erstmal ein File lädt. Einfach nur per Include einbinden hilft nicht viel, denn es gibt auch teile die man je nach Projekt anpassen muss. Typisch ist das z.B. die Taktfrequenz oder die Belegung von Pin. Auch ein Grundgerüst für die Beschreibung der Hardware kann man so gleich mit laden.

Ich fürchte hier versucht Stundenlang versucht etwas zu Automatisieren, dass einem dann später im Laufen der nächsten Jahre vielleicht mal 10 minuten einspart.

Pr0gm4n
14.01.2011, 18:30
Hi,

ich denke so wie ich es jetzt hab ist es sinnvoll, aber danke für die Hilfe

Um eben das stundenlange Suchen nach so einer Vorlage-Funktion zu vermeiden hab ich ja dann hier gefragt als ich nix gefunden hab ;)

Ich hab jetzt eben eine Datei die für neue Projekte einfach in den Projektordner kopiert und angepasst wird, hat mich zum erstellen bisher nicht viel Zeit gekostet, bringt mir aber dass ich die Befehle nicht immer im Internet nachschlagen muss wenn ich Interrupts freischalten will und so weiter ;)

LG Roland

oberallgeier
15.01.2011, 11:42
... bringt mir aber dass ich die Befehle nicht immer im Internet nachschlagen muss ... Interrupts freischalten ... so weiter ...Wie oft muss ich es noch schreiben? Die Mikrocontrollernutzung ohne zugehörigem Datenblatt ist wirklich eines der letzten großen Abenteuer unserer Tage. Aber da musst Du nun eben durch. Auch später mal durch die Tatsache, dass verschiedene Controller leicht differierende Pinbelegungen, Befehlsregister, Steuerbitnamen uswusf haben.

Mach Dir die Arbeit ruhig leicht, dann haste später mehr davon. Nicht nur jetzt.

Pr0gm4n
15.01.2011, 14:33
Hi,

mit "im Internet nachschlagen" meinte ich eigentlich die Datenblätter der zugehörigen Controller... ;)

Arbeit leicht machen heißt bei dir nehm ich an die Datenblätter mal auszudrucken?^^

LG Roland