- SF800 Solar Speicher Tutorial         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 36

Thema: 2.Programm :)

  1. #21
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo µautonom!

    Genau und for allem übersichtlicher und effizienter.

    Wenn Du z.B. ein ASM Program vom Sprut mit meinem vergleichst, dann siehst Du, dass ich jedes unbedeutendes Zeichen zu vermeiden versuche, um möglichst kurzes und übersichtliches ASM Programm zu erstellen. Weil ich immer mit PADs arbeite, schreibe ich in meinen Programmen keine Kommentare (nur wenn ich sie veröffentliche).

    Mit der Zeit entwickelt sich "von selbst" ein Programmstyle, wie eine Handschrift. Ich habe aber, bevor ich auf PICs umgestiegen bin, andere Prozessoren in ASM programmiert. Ich könnte auch AVRs wählen, finde aber persönlich PICs "sympatischer".

    Viel Spass bei der PIC Programmierung, Du bist sicher auf dem richtigen Weg zum Erfolg!

    MfG

  2. #22
    Erfahrener Benutzer Begeisterter Techniker Avatar von µautonom
    Registriert seit
    04.04.2007
    Ort
    Paderborn
    Beiträge
    225
    Hi PICture,

    bei mir war das auch so ähnlich das ich vor nem Jahr unegfähr mit einem 80C535 gearbeitet habe (in der Schule ) Alles in Assembler programmiert. Das hat mir den Einstieg in die PIC porgrammierung erleichert. Ich selber finde den PIC auch sympatischer deswegen hab ich mich auch für diesen entscheiden . PAD ist ne gute Sache, wenn man viele Verzweigungen und Sprünge hat wird man irgendwann die Übersicht verlieren, da ist so ein Ablaufplan sehr hilfreich.

    Danke den werd ich haben

    Noch ne Frage, wie lange arbeitest du schon mit PICs?

    Mfg

  3. #23
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Hi µautonom!

    Geschichte war im Gymnasium meine Schwäche, ich kann mir die Daten nicht merken, aber ungefähr 1,5 Jahre. Mit ASM Programmierung habe ich vor ca. 15 Jahren angefangen.

    MfG

  4. #24
    Erfahrener Benutzer Begeisterter Techniker Avatar von µautonom
    Registriert seit
    04.04.2007
    Ort
    Paderborn
    Beiträge
    225
    Hi,
    15Jahre , sind ne ganze Menge

    Ich hab mal das ganze noch mit Unterprogranmm gemacht

    Code:
    w_temp        EQU     0x70        ; context saving
    status_temp   EQU     0x71        ; context saving
    
    INTSERV  	movwf   w_temp            ; W register retten
       		movf   STATUS,w           ; status register nach W register
       		movwf   status_temp       ; STATUS register retten
    
    IntEnd   	movf    status_temp,w     ; STATUS register
       		movwf   STATUS            ; wieder herstellen
       		swapf   w_temp,f
       		swapf   w_temp,w          ; W register wieder herstellen
    
    
    ;*****************************************************************
    ;Programm
    ;*****************************************************************
    	
    		
    
    		movlw 3
    		movwf 0x20		; Speicherzelle wird die Zahl3 geladen 
    
    anf	
    			btfsc PORTA, 0	; Taster abfragen - Taster gedrückt -> zur Zählschleife 
    			goto anf
    
    ;**************************************************************
    	
    			call z_schleife	; Unterprogrammm aufrufen
    
    ;***************************************************************
    
    t_los			
    			btfss PORTA, 0	;Taster abfragen - Taster los -> zum Counter
    			goto t_los
    
    ;***************************************************************
    
    			call z_schleife    
    
    ;****************************************************************
    
    			decfsz 0x20, 1	; Counter = 3 
    			goto anf
    			bsf PORTB, 0
    			
    loop			
    			goto loop
    
    ;************************Unterprogramm****************************
    ;20000 Takte
    
    z_schleife		
    			movlw d'100'    
       			movwf 0x21
    
    S2
       			movlw d'200'   
       			movwf 0x22   	 
    
    S22         
       			decfsz 0x22, 1   
       			goto S22   
       			decfsz 0x21, 1 
       			goto S2 
    			
    		return	
    
    ;******************************************************************
    			
    end
    Ich glaube das würde auch ohne den Code am Anfang funktionieren, obwohl ich gar nicht weiss wie das benutzen kann^^ Code funktioniert aber habs getestet.

    Kann mir jemand eklräen was man dabei beachten muss, robotcheck hat
    was von W-Register retten geschrieben, was hat es damit auf sich ? Bei sprut konnt eich nix dazu finden sowie hier im Wiki, oder bin ich blind=?

    Mfg

    Mfg

  5. #25
    Neuer Benutzer Öfters hier
    Registriert seit
    17.03.2006
    Beiträge
    22
    Hallo,

    das Retten des W- und Status Registers wird hauptsächlich in der Interrupt Routine benutzt. Ich habe es aber selbst erlebt und auch bei anderen festgestellt, dass es bei Unterprogrammen, die oft aufgerufen werden, sinnvoll sein kann, diese Register zu retten. Wenn Du Dir die Zeitschleife mal anschaust, dann findest Du dort Befehle, die das W-Register überschreiben. Außerdem wird das Statusregister verändert, wenn das Zählregister auf 0 steht (Zero-Bit).

    Beispiel:
    Falls Du die Zeitschleife aus dem Hauptprogramm aufrufst, und vor dem CALL-Befehl einen Wert im W-Register stehen hast, den Du nach der Zeitschleife noch weiterverwenden willst, dann wird dieser ohne das Retten überschrieben. Natürlich kann man diesen Wert auch in einem anderen Register zwischenspeichern, aber das wird gerne vergessen. Rettet man diese Register, dann braucht man sich darüber keine Gedanken zu machen, denn die Werte sind nach dem UP genauso, wie davor.

    Informationen dazu findest Du im Bereich "Interrupt"

    http://sprut.de/electronic/pic/falle...html#interrupt


    Fazit: Das Register retten ist bei Unterprogrammen nicht notwendig. Man muss jedoch dann wissen, was nach dem Unterprogramm mit dem W-Register und dem Status-Register passiert. Deshalb hatte ich geschrieben: Es kann notwendig sein, diese Register zu retten.

    Falls Du es benutzt, dann müssen die Register am Anfang des Unterprogrammes gerettet und vor dem Verlassen wieder hergestellt werden.

    So, ich hoffe das war verständlich. Eventualitäten lassen sich nicht leicht erklären.

  6. #26
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Das mit dem "Register retten" bezieht sich auf ISR, was Du nicht hast.

    Ich denke, das Du nicht das ganze Programm gepostet hast, da fehlt z.B. "__config" usw.

    Ich habe aus Deinem Programm, alles was ich unnötig finde, entfernt. Hoffe aber, das es trotzdem funktioniert.

    MfG
    Code:
    ;***************************************************************** 
    ;Programm 
    ;***************************************************************** 
        
           
    
          movlw 3 
          movwf 0x20      ; Speicherzelle wird die Zahl3 geladen 
    
    anf    
             btfsc PORTA, 0   ; Taster abfragen - Taster gedrückt -> zur Zählschleife 
             goto anf 
    
    ;************************************************************** 
      
    ;*************************************************************** 
    
    t_los          
             btfss PORTA, 0   ;Taster abfragen - Taster los -> zum Counter 
             goto t_los 
    
    ;*************************************************************** 
    
             call z_schleife    
    
    ;**************************************************************** 
    
             decfsz 0x20, 1   ; Counter = 3 
             goto anf 
             bsf PORTB, 0 
              
    loop          
             goto loop 
    
    ;************************Unterprogramm**************************** 
    ;20000 Takte 
    
    z_schleife       
             movlw d'100'    
                movwf 0x21 
    
    S2 
                movlw d'200'    
                movwf 0x22       
    
    S22          
                decfsz 0x22, 1    
                goto S22    
                decfsz 0x21, 1 
                goto S2 
              
          return    
    
    ;****************************************************************** 
              
    end

  7. #27
    Neuer Benutzer Öfters hier
    Registriert seit
    17.03.2006
    Beiträge
    22
    @PICture

    Der Befehl call z_schleife nach dem goto anf sollte drinbleiben.

    Ein Taster kann sowohl beim Drücken, als auch beim Loslassen prellen.

    Bei diesem Programm könnte es sich an folgender Stelle bemerkbar machen:

    Wenn die Taste zum 3ten mal gedrückt wird, dann geht die LED an, BEVOR die Taste wieder losgelassen wurde.
    Ob es so ist, entscheidet jedoch der Praxis-Test.

  8. #28
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Hallo robotcheck!

    Das stimmt nicht, da das Program in der endloser Schleife "t_los" so lange bleibt, bis der Taster losgelassen wird.

    MfG

  9. #29
    Neuer Benutzer Öfters hier
    Registriert seit
    17.03.2006
    Beiträge
    22
    Hallo PICture,

    das ist ja auch richtig, wenn man davon ausgehen kann, dass der Taster nicht prellt.

    Falls er aber doch prellt, dann wird das Programm durch Drücken des Tasters die Schleife anf verlassen und sich (bei 8MHz) innerhalb von 2 µs in der Schleife t_los befinden.

    Das Prellen des Tasters ist eine Folge von Spannungsspitzen (High/Low) in einem Zeitraum von bis zu 10 ms.

    In der Schleife t_los registriert der PIC also noch das Kontaktprellen aus der Schleife anf und wird diese Schleife direkt wieder verlassen. Deshalb muss die Zeitschleife auch nach anf eingefügt werden.

    Es ist von den praktischen Gegebenheiten abhängig.
    Vielleicht wird uns µautonom im nächsten Beitrag mitteilen, das sein Programm in Deiner Variante einwandfrei läuft. In diesem Falle prellt sein Taster beim Drücken nicht.
    Vielleicht prellt der Taster auch überhaupt nicht und wir sind aufgrund der anderen Fehler im Programm nur dieser Vermutung aufgesessen. Dann kann er die Zeitschleife auch wieder ganz rausnehmen (was ich grundsätzlich nicht machen würde).

    Gruß

  10. #30
    Erfahrener Benutzer Begeisterter Techniker Avatar von µautonom
    Registriert seit
    04.04.2007
    Ort
    Paderborn
    Beiträge
    225
    Hi, Leute danke erstma für die Info zu dem Thema W-register retten.

    Also beim drücken prellt der Taster auf jeden Fall, wie das ganze beim loslassen asusieht weiss ich nciht werd gleich mal mal die Version von PICture testen, werde ne Rückmeldung machen.

    Kam leider gestern nicht zum testen.

    EDIT: Beim loslassen prellt der Taster nicht, deshalb funktioniert das Programm auch ohne die Zählschleife bei der Abfrage ob der Taster losgelassen wurde. Wenn man sich nicht sicher ist, ist das ja nicht verkehrt sicherhalbsweiser die Zeitschleife nochmal an dieser Stelle aufzurufen.


    Mfg

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests