- LiTime Speicher und Akkus         
Seite 5 von 5 ErsteErste ... 345
Ergebnis 41 bis 48 von 48

Thema: Tips & Tricks

  1. #41
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Anzeige

    Praxistest und DIY Projekte
    Hier ist ein kleiner Tipp um z.B den Inhalt des W-Registers mit irgend einer anderen Speicherstelle/Fileregister zu tauschen und das ohne eine zusätzliche Variable/Register oder so.

    XORWF FILEREG,F
    XORWF FILEREG,W
    XORWF FILEREG,F

    man kann auf ähnliche Art auch den Inhalt von 2 Fileregistern/Speicherstellen tauschen:

    MOVF FILEREG1,W
    XORFW FILEREG2,F
    XORWF FILEREG2,W
    XORWF FILEREG2,F
    MOVWF FILEREG1

    mfg Siro

  2. #42
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo!

    Wenn man einfachen RC Oszillator mit genug hocher Frequenz mit Quarzreferenz misst, dann bekommt man, wegen Unstabilität, an den niedrigsten Stellen echte Zufallszahlen, bessere als bei besten und komplizierten softwaremässigen Pseudozufallzahlgeneratoren. Das kann man aber nur dann verwenden, wenn zwei Timer für nötige Messzeit frei zur Verfügung sind.

    MfG

  3. #43
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo!

    Für alle, die einigermassen english beherrschen würde ich Microchip Forum empfehlen http://forum.microchip.com , wo Spezialisten aus aller Welt gibt und mir wurde dort am Anfang schnell geholfen...

    MfG

  4. #44
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo!

    Ich habe noch einen Tipp, wenn es um 7-segment LCD Displays geht, die durch PIC's mit niedriger Versorgungspannung gesteuert werden und praktisch kein Strom verbrauchen sollten. Die Idee hat mir dieser Thread erinnert: https://www.roboternetz.de/phpBB2/viewtopic.php?t=56815 .

    Man braucht in einem Taschenrechner nur die "echte" Tastatur mit vom PIC gesteuerter elektronischer ersetzen und gewünschte Zeichen/Befehle "eintippen". Mit ca. 3 V Versorgung Displays ohne Controller brauchen viel I/O Pins (siehe dazu: https://www.roboternetz.de/phpBB2/ze...ag.php?t=47685 ).

    Um biliebige Zahl mit dezimal Punkt "eintippen", braucht man eigentlich nur 12 elektronischen "Tasten", die meistens in einem Taschenrechner in Matrix z.B. 4x6 konfiguriert sind.

    Das Vorteil dieser Lösung ist, dass der PIC nur sehr kurz mit Löschen der aktuellen und danach "Eintippen" der gewünschten Zahl beschäftigt ist. Wenn man auch die Uhrzeit haben möchte, wäre sowas optimal: http://www.pollin.de/shop/dt/MjQ5OTI...enrechner.html .

    MfG

  5. #45
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo!

    Aus praktischer Erfahrung mit Brennen von PIC's in laufenden Spielzeugrobbis möchte ich praktisch ausprobiertes simples Brennerkabel vorstellen, der keinen Umsschalter braucht und nach dem Brennen zum Prüfen des gerade gebrantes Programms nicht getrennt werden muss. Damit das Programm sicher startet muss man das Netzteil kurz abschalten.

    Die zum Brennen nötige Pins vom PIC: PGC, PGD und VPP lasse ich für Hardware unbeschaltet und die Versogungspannung aus Brenner und Netzteil bzw. Akku lasse ich per Schottky Dioden (D1 und D2) "umschalten".

    Weil ich hauptsächlich mit unterschidlichen Akkuspannungen (2,4 bis 4,8 V) und PIC's in SMD arbeite, lieber nehme ich einen PIC mit min. drei I/O'S mehr als nötig, da er deshalb nicht schwerer ist.
    Code:
                         vom Netzteil bzw. Akku
    
                                  +   -
                                  V   V
                                  |   |
                                  |   |
                               D2 V   |
                                  ~   |
                  /               |   |           \
                 | +VCC >------>S-+---|-----> +VCC |
                 |             D1     |            |
                 |  VPP >-------------|----->  VPP |
         vom     |                    |            |
                 <  PGD >-------------|----->  PGD > zum PIC
         Brenner |                    |            |
                 |  PGC >-------------|----->  PGC |
                 |                    |            |
                 |  GND >-------------+----->  GND |
                  \                               /
    
    (created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  6. #46
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo!

    Ich möchte mein bereits gelöstes Problem vorstellen, dessen Lösung für mich nicht simpel war.

    Um Strom zu sparen, wollte ich, dass nach dem Einschalten der Versorgungspannung der µC sofort in Schlaf geht, bleibt aber per X steuerbar. Er sollte "etwas tun" (X=1) und nach erledigen seiner Aufgabe (X=0), wieder einschlafen.

    Sieht zwar sehr simpel aus, aber die Lösung war für micht nicht so. Das Signal vom X Pin muss eben das Program starten, was ohne Unterbrechung INT nicht möglich ist, weil der µC schläft. Per INT Pin kann man wieder den X nicht einlesen und auswerten.

    Die Lösung ist das X Signal auf zwei Pins X und INT paralell zuführen (siehe PAD). Das müsste bei allen Typen von µC's funktionieren.
    Code:
                                           Eischalten
                                                |
             X=1 Aufwecken                      V
                 und etwas tun   +-- INT -> Schlafen <-------+
                     A           |              |            |
                     |           |              V            |
         X >---------------------+         Etwas tun <---+   |
                     |           |              |        |   |
                     V           |              V        |   |
             X=0 Einschlafen     +--- X ----> X = 1 ? J -+   |
                                                N            |
                                                |            |
                                                +------------+
    
    (created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  7. #47
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Zitat Zitat von PICture Beitrag anzeigen
    Per INT Pin kann man wieder den X nicht einlesen und auswerten.
    Doch! Du kannst auch innerhalb einer ISR auf das PINx-Register zugreifen und dann das Bit rausziehen, das dich interessiert. Es macht überhaupt keinen Unterschied, ob PinX den Interrupt auslöst und du dann PinY einliest, wenn an beiden Pins das gleiche Signal angeschlossen ist. Davon abgesehen musst du das Bit in der ISR noch gar nicht auslesen

    Die programmatische Realisierung geht übrigens auch einfacher, du brauchst nur unter Umständen eine Entprellung des Signals X (was aber zur Not auch analog mit einem RC-Glied ginge und wohl auch bei deiner aktuellen Version erforderlich sein dürfte, oder?). Das Schema wäre in etwa so:

    Initialisierung (Interrupts konfigurieren etc.)
    Bei Bedarf (wenn wirklich direkt ein sleep nach dem Start erforderlich ist): sleep
    Hauptschleife:
    - X einlesen
    - X=1: Was tun
    - sonst (X= 0): sleep
    Ende der Hauptschleife.

    Die ISR für PinX enthält keinen Code, der Interrupt wird nur benötigt um den µC aufzuwecken und die Ausführung damit fortzusetzen.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  8. #48
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Danke sehr für deinen Tipp, aber bei mir arbeitet es ohne Interrupts (ISR) mit GIE = 0, weil das in meinem Fall unnötig war.

    Die Hardware ist dort skizziert: https://www.roboternetz.de/community...parsam-steuern ?
    Code:
    ;2-phasiger bipolarer Getriebesteppercontroller mit 4,7 µF Elkos seriell mit Spulen
    	LIST      P=16F676
    	include "P16F676.inc"                   ; 12 kHZ ext. RC Oszillator
    	__CONFIG     _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _EXTRC_OSC_CLKOUT & _BODEN_OFF
    #define	MAN	PORTC,0				; Motor an, mit PORTA,2 (INT) verbunden
    #define	MLR	PORTC,1				; Drehrichtung
    #define S1P	PORTC,2				; 1. Spule			
    #define S2P	PORTC,3				; 2. Spule
    		ORG     0
    		call	Init
    Main		btfss	MAN			; drehen bzw. schlafen
    		goto	Schlaf
    Main1		btfss	MLR			; gewünschte Drehrichtung prüfen
    		goto	LRot
    		goto	RRot
    LRot		bcf	S1P			; links drehen
    		call	Del
    		bsf	S2P
    		call	Del
    		bsf	S1P
    		call	Del
    		bcf	S2P
    		btfss	MAN
    		goto	Schlaf
    		goto	Main1
    RRot		bsf	S1P			; rechts drehen
    		call	Del
    		bsf	S2P
    		call	Del
    		bcf	S1P
    		call	Del
    		bcf	S2P
    		btfss	MAN
    		goto	Schlaf
    		goto	Main1
    Del		nop
    		goto	$+1
    		return
    Schlaf		bcf	INTCON,INTF
    		bsf	INTCON,INTE
    		sleep
    		goto	Main1
    Init		movlw	7
    		movwf	CMCON			; comparator off, RA0-2 digital I/O
    		bsf	STATUS,RP0
    		bcf	ADCON0,ADON		; ADC
    		clrf	ANSEL			; off
    		bsf	OPTION_REG,INTE		; INT on
    		movlw	2F
    		movwf	TRISA
    		movlw	21
    		movwf	TRISC
    		bcf	STATUS,RP0
    		clrf	PORTC
    		return
    		end
    Geändert von PICture (09.07.2013 um 14:51 Uhr)
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

Seite 5 von 5 ErsteErste ... 345

Berechtigungen

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

LiTime Speicher und Akkus