- LiFePO4 Speicher Test         
Seite 3 von 14 ErsteErste 1234513 ... LetzteLetzte
Ergebnis 21 bis 30 von 136

Thema: Anfänger mit STK500 und Assembler

  1. #21
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.11.2005
    Ort
    Bayern
    Alter
    55
    Beiträge
    310
    Anzeige

    Praxistest und DIY Projekte
    Hallo mare_crisium,
    nehme deinen Rat mit den Timer gern an.
    Zum Assembler bin ich gerade wegen der Hardwarenaehe gekommen.
    Hatte mich auch erst an C und Bascom probiert.
    Da blieben fuer mich aber einige Fragen offen. Es funktionierte zwar aber die Hintergruende bleiben da auf der Strecke.
    Fuer einige vielleicht nicht wichtig, fuer mich aber schon.
    Wenn mann die Hintergruende kennt, kann man besser aggieren. - ist meine Meinung - fuer mich ist das Ganze "nur" Hobby und das soll ja auch Spass machen.
    Ausserdem finde ich, ist es aehnlich wie in der Schule Mathematik. Wenn man die Hintergruende kennt, braucht man nicht alles auswendig lernen(was eh keinen Sinn macht) - man kann sich seine Loesungen erarbeiten.

    Eine Frage noch zum STK500. Es ist doch sicher sinnvoll auf externen Takt umzusteigen. Was fuer einen Quarz empfiehlst du mir? 4, 8, ??? MHz
    ### Silvio ###

  2. #22
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    Guten Abend, robo_wolf,

    genauso geht mir's auch: Ich will eben gern wissen, was der MC so treibt . Dazu kommt, dass das Assemblerprogrammieren umso zügiger voran, je mehr sorgfältig ausgetestete Module man sich im Laufe der Zeit aufbaut. Das grösste Programm, das ich so geschrieben habe ist 13kB gross. Der Quelltext (alle Module zusammengerechnet und inkl. Kommentare) ist 13000 Zeilen lang.

    Wegen des Quarzes? Na, wenn schon dann "the full monty"! Nimm ruhig die 16MHz, die Dein 8515 laut Datenblatt maximal vertägt. Meine ATmegas auf dem STK500 laufen auch so.

    Ciao,

    mare_crisium

    P.S.: Zu Erleichterung der Parameterberechnung für den Timer hänge ich mal die Rechentabelle an, die ich mir dafür gebastelt habe. Nur die gelb unterlegten Felder sind für die Eingabe.
    Angehängte Dateien Angehängte Dateien

  3. #23
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.11.2005
    Ort
    Bayern
    Alter
    55
    Beiträge
    310
    Hallo mare_crisium,
    in die kleine Tabelle hast du ja ordentlich was reingepackt.
    Danke
    Hatte leider ein paar technische Probleme mit dem AVR-Studio.
    Sind aber nun geloest.
    Welches Projekt hat denn 13000 Codezeilen gebraucht?
    ### Silvio ###

  4. #24
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    robo_wolf,

    das ist ein Programm, das mit 16MHz auf einem ATmega16 läuft und zwei optische Maussensoren auswertet. Es berechnet alle 200ms aus den Maus-Messwerten eine komplette Koppelnavigation für das Fahrzeug, an dem die Sensoren montiert sind. Es hat ausserdem eine Schnittstelle zum TWI-Bus, über den andere Busteilnehmer die berechneten Daten (Ort, Orientierung, Linear- und Drehgeschwindigkeit) abfragen können. Leider sind die Messdaten der Maussensoren nicht so genau, wie ich's erhofft hatte . Bin aber noch am Experimentieren.

    Ciao,

    mare_crisium

  5. #25
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    robo_wolf,

    hier die Kommentare zu Deinem Lernprogramm Nr. 4, diesmal in graphischer Form. Die graphische Darstellung ist manchmal ein gutes Mittel, um die Struktur des Programms zu durchschauen. Oft sieht man dann wieder den Wald und lässt sich von den vielen Bäumen nicht mehr so durcheinanderbringen .

    Es gibt verschiedene Normen bzgl. der Symbole, die für Abfrage, Anweisungen, Sprungmarken usw. verwendet werden sollten. Meine Darstellung ist "Freistil".

    Ciao,

    mare_crisium
    Angehängte Dateien Angehängte Dateien

  6. #26
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.693
    13 000
    und ich dachte immer, die 3000 oder mehr von meinem Dottie seien schon viel. Und davon sind vermutlich mehr als 60 % Kommentare. Alle Achtung!

    Zitat Zitat von mare_crisium
    ... nicht ganz normenkonform ...
    Ich mache das auch nicht korrekt. Bin halt die Nassi-Shneiderman gewöhnt . . . und versuche mich, etwas sehr selten, in UML.
    Ciao sagt der JoeamBerg

  7. #27
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    Oberallgeier,

    ja, ist schon ne ganze Menge! Ich wollte damit auch nur sagen, dass der Quelltext auch bei ganz harmlosen Projekten schon ziemlich lang werden kann. Um sowas fehlerfrei zum Laufen zu bringen, braucht man eben
    1. eine übersichtliche, vorzugsweise modulare, Programmstruktur
    2. einzeln, vorm Einbinden ins Gesamtprogramm, ausgetestete Programm-Module.
    Bei diesem Austesten findet man Fehler sehr viel schneller, wenn man sich selbst bestimmte Regeln für das Programmieren vorgibt und sie dann sorgfältig einhält.

    mare_crisium

  8. #28
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.11.2005
    Ort
    Bayern
    Alter
    55
    Beiträge
    310
    so nach laengerer Zeit nun endlich das Programm mit Timer0
    Code:
    ;***** STK500 Lernprogramm Nr.4c
    ;*** Aufgabe: die der jeweiligen Taste zugeordnete LED auf dem STK500 schalten
    ;*** 1. Tastendruck: LEDs einschalten
    ;*** 2. Tastendruck: LEDs ausschalten
    ;*** zum Entprellen soll kein Interrupt werden 
    ;*** 
    .include "m8515def.inc" 
    .def Temp        = r16			; Temporary Register 
    .def Tast_Stat0  = r17			; Tasten Status
    .def Tast_Stat   = r18
    .def LED_Stat    = r19			; LED Status
    .def Tast_Sperre = r0
    .def Aus		 = r20
    ;
    ;	TimerWerte(bei 1MHz - ca. 0,1sec/Takt)
    ;.equ Timerwert   = -50  		; Timerschritte bis zum Überlauf(fuer Simulatortest)
    .equ Timerwert   = 61    		; Timerschritte bis zum Überlauf
    .def tsw         = r5         	; Timer Startwert (Reload)
    ;
    ;
    .equ LED_PORT = PORTB			; LEDs
    .equ LED_DDR  = PORTB-1			; DataDirectory fuer LEDs
    .equ TAST_PORT= PORTD			; Tasten
    .equ TAST_DDR = PORTD-1			; DataDirectory fuer TastenEingang
    .equ TAST_PIN = PORTD-2			; TastenEingang
    ;
    ;***** 
    ;Reset and Interrupt vector    ;VNr.  Beschreibung 
       rjmp   RESET                ;1   POWER ON RESET 
       reti						   ;2   Int0-Interrupt 
       reti                        ;3   Int1-Interrupt 
       reti                        ;4   TC1 Capture 
       reti                        ;5   TC1 Compare Match A TC2 Overflow 
       reti                        ;6   TC1 Compare Match B TC1 Capture 
       reti                        ;7   TC1 Overflow TC1 Compare Match A 
       rjmp	TIMER0_OVF             ;8   TC0 Overflow TC1 Compare Match B 
       reti                        ;9   SPI, STC Serial Transfer Complete TC1 Overflow 
       reti                        ;10  UART Rx Complete TC0 Overflow 
       reti                        ;11  UART Data Register Empty SPI, STC Serial Transfer Complete 
       reti                        ;12  UART Tx Complete UART Rx Complete 
       reti                        ;13  Analog Comparator 
       reti                        ;14  Int2-Interrupt 
       reti                        ;15  Timer 0 Compare Match 
       reti                        ;16  EEPROM Ready 
       reti                        ;17  Store Program Memory Ready 
    ;*****
    
    RESET: 
    	
    	
    	ldi temp,Timerwert      
     	mov tsw,temp            
     	out TCNT0,tsw
    
    ;	ldi temp,(1<<CS00)			; Taktfrequenz ohne Vorteiler gewaehlt (fuer Simaulatortest)          
    	ldi temp,(1<<CS00)|(1<<CS02)			; Taktfrequenz mit Vorteiler 1024 gewaehlt           
     	out TCCR0,temp
    
    	ldi temp,(1<<TOIE0)			; Timer0 Overflow aktivieren
     	out TIMSK,temp          
           
    	
    
    
    
    	ldi r16, LOW(RAMEND)        ;Stack initialisieren 
    	out SPL, r16 
    	ldi r16, HIGH(RAMEND) 
    	out SPH, r16 
    
    	clr Temp                    ;Temp mit 0b00000000 bzw. 0x00 laden 
    	out TAST_DDR, Temp          ;PORTD als Eingang 
    	mov Tast_Sperre, temp
    	ser Temp                    ;Temp mit 0b11111111 bzw. 0xFF laden 
    	out TAST_PIN, temp			;STK500 schaltet gegen GND - Taste gedreuckt (Pin==0)
    	out TAST_PORT, temp         ;PullUp an PortD einschalten 
    	out LED_DDR,Temp            ;PORTB als Ausgang 
    	out LED_PORT, temp          ;PORTB (LEDs) aus 
    	clr Tast_Stat				;Tast_Stat auf def. Zustand
    	clr Aus
    
    	sei							; globale Interruptfreigabe
    
    MAIN:
    	rcall TASTEN_TEST
    	rjmp MAIN
    
    
    TIMER0_OVF:
    	push	TEMP					; TEMP auf Stack sichern
    	in	TEMP,SREG					; SREG auf Stack sichern 
    	push	TEMP					;
    	
    	in Tast_Stat0, TAST_PIN
    	com Tast_Stat0					; invertiere
     	out TCNT0,TSW  					; Timer0-Startwert setzen       
    		
    	pop	TEMP						; 
    	out	SREG,TEMP					; SREG zurueckschreiben
    	pop	TEMP						; TEMP zurueckschreiben 
    	reti
    
    
    TASTEN_TEST:
    	mov Tast_Stat, Tast_Stat0
    	cp Tast_Stat, Aus				; Vergleich - (0b11111111->keine Taste)
    	brne LED_TOGGLE					; bei != rufe LED_TOGGLE auf
    	ret
    
    
    LED_TOGGLE:							; schaltet LED um
    	in LED_Stat, LED_PORT			; lese LEDs aus und speichere in LED_Stat
    	com LED_Stat					; invertiere
    	eor Tast_Stat, Tast_Sperre		; gedrueckt gehaltene Taste sperren
    									; LED=1 Tast=1 == LED=0
    									; LED=0 Tast=0 == LED=0
    									; LED=0 Tast=1 == LED=1
    									; LED=1 Tast=0 == LED=1
    	eor LED_Stat, Tast_Stat			; ExclusivODER - schalte die Ausgaenge , wo Tasten gedrueckt werden um
    	com LED_Stat					; invertiere
    	out LED_PORT, LED_Stat			; Ausgabe an LEDs
    	in Tast_Stat0, TAST_PIN			; Wiedereinlesen fuer Tastensperre
    	com Tast_Stat0					; invertiere
    	mov Tast_Sperre, Tast_Stat0
    	ret
    Nur das Problem mit der 2.Tasten, wenn eine vorher "gedrueckte" noch gesetzt ist bzw. nicht losgelassen wurde.
    Das will ich noch aendern. - Es soll auch eine 2. oder 3. Eingabe moeglich sein, wenn die 1. oder 2. nicht zurueck gesetzt wurde bzw. die Tasten noch immer gedrueckt sind.
    ### Silvio ###

  9. #29
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.11.2005
    Ort
    Bayern
    Alter
    55
    Beiträge
    310

    graphische Darstellung

    Hallo mare_crisium,
    habe mal eine graphische Darstellung gemacht, so wie ich es mir vorstelle.
    Bitte verbessere mich, wenn Du Ungereimtheiten oder Fehler siehst.
    Angehängte Dateien Angehängte Dateien
    ### Silvio ###

  10. #30
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    robo_wolf,

    werd's mir heute abend zu Gemüte führen. Versuche, morgen meine Rückmeldung zu posten.

    Ciao,

    mare_crisium

Seite 3 von 14 ErsteErste 1234513 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen