- LiTime Speicher und Akkus         
Ergebnis 1 bis 9 von 9

Thema: [ERLEDIGT] Avr-Studio - Vorlagen für neu erstellte Dateien

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604

    [ERLEDIGT] Avr-Studio - Vorlagen für neu erstellte Dateien

    Anzeige

    Praxistest und DIY Projekte
    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:
    Code:
    ;.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

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    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:

    Code:
    ;===================================================================================
    ;========== 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.
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    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

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Zitat Zitat von oberallgeier am 14. Jan. 2011 um 13:45
    ... 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.
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    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

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    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

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Zitat Zitat von Pr0gm4n
    ... 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.
    Ciao sagt der JoeamBerg

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test