- 3D-Druck Einstieg und Tipps         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 30

Thema: PIC Fallen

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2006
    Alter
    35
    Beiträge
    122
    Anzeige

    Praxistest und DIY Projekte
    moin

    Wer den PIC 16F88 mit IO-Pins an PortA und RB6+RB7 sollte in der Assembler-Initialisierung in die Bank 1 folgenden Code schreiben:

    movlw B'00000000'
    movwf ANSEL

    Und nicht etwa was auf der Sprut-Homepage steht:

    MOVLW 0x06
    MOVWF ADCON1


    (hat mich lange aufgehalten )

    mfg orph

  2. #12
    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 orph!

    Vielen Dank! Vielleich sollten wir noch ein Thema "Sprut Fallen" eröffnen ?

    MfG

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Ein weiterer Fall von einer Falle oder einfach nur
    Beim PIC 16F877A (PIC 16F87X) PORTE mit seinen 3 Pins die Richtung auf Ausgänge umschalten (sind nach Reset Eingänge):
    Code:
    	movlw	11111000b	; 0=Ausgang / 1=Eingang
    	movwf	TRISE
    Diese zwei Befehle kosteten mich 3 Tage Suche, warum eine an PortD angeschlossene 7-Segment-Anzeige mal leuchtet und mal nicht.
    Wenn man dann irgendwann im Datenbuch nachschaut, was denn eigentlich die Bits 7...3 im TRISE machen, ..... auweia, durch TRISE, 4 = 1 ist PORTD im PSP-Mode, ....
    Die Richtung also nur durch AND auf 0 setzen und die restlichen Bits schön in Ruhe lassen:
    Code:
    	movlw	11111000b	; 0=Ausgang / 1=Eingang
    	andwf	TRISE		; AND !!!
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  4. #14
    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!

    Ich weiss nicht ob es eine Falle ist, aber seit ein paar Monaten ist mir nicht gelungen weder Haupt- noch Time1 Oszillator mit Uhrenquartz 32768 Hz zum oszillieren zu bringen und musste ein externen Oszillator mit zwei CMOS Inverter anwenden. Sogar eine Suche im Microchip Forum hat nichts gebracht. Ist es in realer Hardware (nicht im Simulator) wirklich unmöglich ?

    MfG

  5. #15
    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!

    Beim PIC18F252 habe ich zwei mir bisher enbekannte Fallen entdeckt.

    Ich wollte zwei Taster, die auf Portpins paralell zum Display angeschlossen sind einlesen und auswerten. Dafür muss man die zwei Pins vom I/O Port vom Ausgang auf Eingang durch TRIS Register umschalten. Das habe ich mehrmals ohne Probleme gemacht. Diesmal wollte ich es aber eleganter machen: nur die zwei Pins ohne die andere zu beanflüssen mit OR setzen, Taster auswerten und wieder mit AND löschen. Leider funktioniert es nicht. Ich vermute, das TRIS Register nur beschreibbar und nicht ablesbar ist, da nach dem Einschreiben des Registers mit richtigem Wert funktioniert's. Im Datenblatt habe ich darüber nichts gefunden.

    Sofort nach dem Umschalten dieser zwei Pins, konnte ich leider die Taster nicht einlesen, und erst nach Vezögerung von mindestens 3xNOP (3x0,1 us) habe ich es geschafft. Wahrscheinlich im Simulator hätte es keine Probleme gegeben, da dort keine Streukapazitäten die 0,3 us zum Entladen brauchen gibt. Ich bleibe aber trotzdem bei der realer Hardware!

    MfG

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Hallo PICture,
    es könnte sein, daß Du auf einen Pipeline-Effekt gestoßen bist, der in einigen Fällen auftritt, wenn z.B. der erste Befehl noch nicht abgearbeitet ist, der nächste dieses 'unfertig' beschriebene Register ausliest. Dann kommt ein falsches Ergebnis bei raus. Da muß dann 1 NOP zwischen.
    Kannst Du mal die genaue Reihenfolge der Befehle mit dem TRIS-Register posten ?
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  7. #17
    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 kalledom!

    Ich habe es jetzt so:
    Code:
    @RAM		movlw	0x9E		<- hier wird auf RC2 und RC3 als Eingänge umgeschaltet
    		movwf	TRISC
    		goto	$+2		<- hier wird 3xNOP abgewartet (3x0.1µs bei 40MHz PLL/4)		
    		movf	PORTC,0
    		andlw	0x0C
    		btfss	_Z
    		goto	@Out		<- hier wird zurück RC2 und RC3 auf Ausgänge umgeschaltet falls die beiden Taster H sind
    		movlw	0x92		<- hier wird auf Ausgänge zurückgeschaltet falls die beiden Taster L sind und weiter gelaufen
    		movwf	TRISC
    		movff	DTmp6,STmp6	; aktives Display sichern
    		movlw	2		; Display2
    		movwf	DTmp6		; aktivieren
    		lfsr	FSR2,0x060
    		call	@2nd
    		call	@Line
    		call	@4th
    		call	@Line
    		movff	STmp6,DTmp6	; aktives Display wiederherstellen
    @Out		movlw	0x92		<- bei diesem Wert arbeitet Display mit RC 2 und RC3 als Ausgänge
    		movwf	TRISC
    		return
    und es funktioniert.

    Vorher habe ich so erfolglos versucht:
    Code:
    @RAM		movf	TRISC,0
    		iorlw	0x0C		<- hier wird auf RC2 und RC3 als Eingänge umgeschaltet
    		movwf	TRISC
    		movf	PORTC,0
    		andlw	0x0C
    		btfss	_Z
    		goto	@Out		<- hier wird zurück RC2 und RC3 auf Ausgänge umgeschaltet falls die beiden Taster H sind
    		call	@Out		<- hier wird auf Ausgänge zurückgeschaltet falls die beiden Taster L sind und weiter gelaufen
    		movff	DTmp6,STmp6	; aktives Display sichern
    		movlw	2		; Display2
    		movwf	DTmp6		; aktivieren
    		lfsr	FSR2,0x060
    		call	@2nd
    		call	@Line
    		call	@4th
    		call	@Line
    		movff	STmp6,DTmp6	; aktives Display wiederherstellen
    @Out		movf	TRISC,0
    		andlw	0xF3
    		movwf	TRISC
    		return
    Dort, wo jetzt goto $+2 (quasi 3xNOP) ist, habe ich vorher bis zu 10xNOP
    probiert und hat´s nicht funktioniert. Für mich geht eindeutich die Änderung des TRIS Registers mit OR und AND nicht.

    Vielleicht fällt Dir was ein ?. Ich habe damit kein Problem mehr.

    Schöne Grüsse !

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Das könnte des Rätsels Lösung sein:
    Code:
    	movf	TRISC,0
    	iorlw	0x0C
    	movwf	TRISC	; Hier ist der Befehl zum Umschalten ...
    	movf	PORTC,0	; ... der aber hier noch nicht fertig ausgeführt ist !
    	andlw	0x0C
    	btfss	_Z
    	goto	@Out	; Hier springst Du zur Routine ...
    	call	@Out	; ... und hier ruft Du sie als Unterprogramm auf ?
    			; ... Was steht am Ende der Routine: return ?
    
    
    	movwf	TRISC	; So sollte es funktionieren: Befehl zum Umschalten
    	nop		; Hier kann die Richtung umgeschaltet werden
    	movf	PORTC,0	; Hier ist die Richtung umgeschaltet
    3 mal oder 8 mal oder wieviel mal auch immer ein NOP reinzusetzen, kann es ja nicht sein. Es handelt sich um einen µC, der absolut logisch arbeitet und niemals Alzheimer bekommt

    PS: Beim 16F87x z.B. sind die TRIS-Register in Bank 1. Da können die beiden Befehle für TRIS und PORT nicht direkt hintereinander stehen, dazwischen muß erst auf die Bank umgeschaltet werden. Bis dahin ist die Richtung umgeschaltet.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  9. #19
    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 kalledom!

    Der PIC18F252 arbeitet aber mit 10 MHz (40 MHz PLL Oszillator) mit realer Hardware und die 3xNOP (0,3 us) braucht (wahrscheinlich) die Hardware, und nicht der uC selbst.

    Bei den PIC18FXXX gibt es keine Bankumschaltung.

    Es gibt in meinem Program kein Fehler, ich wollte nur auf Probleme, die bei realer Hardware aufereten könnten, aufmerksam machen und zeigen, dass ein fehlerfreies Program (im Simulator) fast immer an die reale Hardware angepasst werden muss.

    Deswegen meine Empfehlung:

    Beim Schreiben eines Programms für reale Hardware nie ein Symulator benutzen !

    MfG

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2004
    Beiträge
    17
    Hi user
    Ich hab ein Problem mit einem PIC 12F629. Ich habe ein Programm für einen anderen PIC geschrieben(16F690). Dieses wollte ich jetzt in den 12F übertagen, weils nur um das Schalten von zwei Ausgängen in einem Abstand von 2 Sekunden geht. Als Start für dieses Schalten dient ein Eingangspegel an einem anderen Pin.
    Das Problem: er erkennt das Startsignal nicht, und arbeitet das Programm also auch nicht ab. Kann sowas an der Konfiguration liegen? Beim 16F läuft das Programm nämlich problemlos.
    Hat einer ne Idee?

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test