PIC -Problem mit 12F675

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
plottermeier
Beiträge: 1452
Registriert: Fr 16. Aug 2013, 14:32

PIC -Problem mit 12F675

Beitrag von plottermeier »

Hallo,
dann will ich auch mal das neue Forum ausprobieren. Ich bastel grad an meinem Stromzähleradapter mit nem PIC.
Da gibt es ja nun diese kleinen Käferchen mit 8 Beinen und internem Oszillator. Da hab ich bisher noch keine Erfahrungen
und ich bekomm die auch absolut nicht zum Laufen. Ich hab hier mal ein Einfachstprogramm gemacht, das einfach nur die
Beinchen auf 5 Volt schalten soll. Aber selbst das klappt nicht. Hat wer ne Idee?

Code: Alles auswählen

	list p=12f675

	#include <P12f675.INC>

	ERRORLEVEL      -302    	;SUPPRESS BANK SELECTION MESSAGES

; Configuration festlegen:
; kein Power on Timer, kein Watchdog, int-Oscillator, kein Brown out
	__CONFIG	_MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_OFF


;***********************************************************************
	org	0x00

	goto	Init

;***********************************************************************
; Initialisierung
;
Init
	; IO-Pins
	bcf	STATUS, RP0		; Bank 0
	clrf	GPIO			; aus!
	movlw	0x07
	movwf	CMCON			; Comparator aus
	bsf	STATUS, RP0		; Bank 1
	bcf	TRISIO,5		; alles output 
	bcf	TRISIO,4		; alles output
	bcf	TRISIO,3		; alles output
	bcf	TRISIO,2		; alles output
	bcf	TRISIO,1		; alles output
	bcf	TRISIO,0		; alles output

	bcf	STATUS, RP0		; Bank0

	; internen Taktgenerator kalibrieren
	bsf	STATUS, RP0		; Bank 1
	call	0x3FF
	movwf	OSCCAL			; 4-MHz-Kalibrierung
	bcf	STATUS, RP0		; Bank 0

	; Interrupt
	bcf	INTCON, GIE		; Int deaktiviert



;***********************************************************************
;Main 
Mainloop
bsf	GPIO,5		;
bsf	GPIO,4		;
bsf	GPIO,3		;
bsf	GPIO,2		;
bsf	GPIO,1		;
bsf	GPIO,0		;
	goto	Mainloop

;***********************************************************************

	end
Benutzeravatar
Fritzler
Beiträge: 12597
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: PIC -Problem mit 12F675

Beitrag von Fritzler »

Bei PIC ASM kann ich dir jetzt leider nicht helfen.
Aber bedenke, dass die µC internen RC Oszillatoren meist zu ungenau für UART sind (von UART gehts dann per Wandler IC über USB).
Bei 20grad Klappts vllt noch, aber bei zB 10 grad im keller haperts dann.
plottermeier
Beiträge: 1452
Registriert: Fr 16. Aug 2013, 14:32

Re: PIC -Problem mit 12F675

Beitrag von plottermeier »

Hallo,
Assembler ist halt schön, wenn das Timing wichtig ist und nicht viel gerechnet werden muss.
glaube nicht, dass es der Oszillator ist. Der scheint wohl irgendwie zu resetten oder so.
Bin eben mit nem Oszi reingekrochen. Das was nach undefiniertem Müll aussieht ist tatsächlich ein Rechteck
GPIO0 sieht so aus:
Bild

GPIO1 und 2 so:
Bild

nur GPIO5 zeigt die erwarteten 5 Volt dauerhaft.
Zuletzt geändert von plottermeier am Fr 16. Aug 2013, 22:29, insgesamt 1-mal geändert.
Benutzeravatar
Fritzler
Beiträge: 12597
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: PIC -Problem mit 12F675

Beitrag von Fritzler »

Mein Post war nur auf eine spätere UART Kommunikation bezogen.
Zum jetzigen Problem trägt das rein garnix bei ;)
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: PIC -Problem mit 12F675

Beitrag von xoexlepox »

plottermeier hat geschrieben:Da gibt es ja nun diese kleinen Käferchen mit 8 Beinen und internem Oszillator. Da hab ich bisher noch keine Erfahrungen...Hat wer ne Idee?
Uii, mal Jemand der sich mit meinem "Lieblingskäferchen" beschäftigt... Du solltest beachten, daß der Startvektor (wie du es richtig progammiert hast) auf 0x00 weist, es aber auch einen Interrupt-Vektor gibt, der auf 0x04 verweist. Ein "org 0x04, retfi", und dann erst das Progamm... könnte hilfreich sein ;) Solange, wie du keine Interrupts verarbeiten willst...

PS: Auf den Call zur Emittlung des OSCCAL-Wertes kannst du dich nur verlassen, wenn du das Ding selber programmiert hast -> Lieber ein "bsf STATUS RP..." und ein "movlw ...., movwf OSCCAL", verwenden.... ;)

Edit: PS added
Zuletzt geändert von xoexlepox am Fr 16. Aug 2013, 23:30, insgesamt 2-mal geändert.
Benutzeravatar
Sascha
Beiträge: 673
Registriert: Di 13. Aug 2013, 15:20
Wohnort: Irgendwo bei Heilbronn

Re: PIC -Problem mit 12F675

Beitrag von Sascha »

Ich geh immer her und schreib auf den Reset-Vektor
goto Init
org 0x10 init
egal ob ich Interrups benutze oder nicht. Ohne das org+Adresse ist die Sprungadresse von Init direkt hinter dem goto-Befehl, wo der PC auch von selber hingesprungen wäre.

Brauchst du unbedingt den Resetpin als IO? Bedenke die INTOSC&MCLR-Falle.

Was passiert, wenn auf der Flash-Adresse 0x3FF kein retlw 0xirgendwas steht? Richtig, es gibt nen Rollover zu 0x000, also einen Reset. Und der Stack läuft dauernd über, weil dauernd gecallt, aber nie returned wird. Microchip packt diesen Befehl mit dem entsprechenden Wert zwar auf 0x3FF, aber sobald du den Chip selber brennst, ohne vorher den Wert per Brenner auszulesen und ihn ebenfalls in dein Programm integrierst, ist er weg und dein Programm dreht sich im Kreis.
plottermeier
Beiträge: 1452
Registriert: Fr 16. Aug 2013, 14:32

Re: PIC -Problem mit 12F675

Beitrag von plottermeier »

Hi,
danke für die Antworten. Brauche den Pin nicht unbedingt.
Ich kann den Reset auch scharf schalten. Wenn ich den Pin dann auf 5V setze und nen Resetinterrupt einbaue, verhält sich der Pic aber nicht anders, als oben beschrieben.

neuer Code:

Code: Alles auswählen

	list p=12f675

	#include <P12f675.INC>

	ERRORLEVEL      -302    	;SUPPRESS BANK SELECTION MESSAGES

; Configuration festlegen:
; kein Power on Timer, kein Watchdog, int-Oscillator, kein Brown out
	__CONFIG	_MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_OFF


;***********************************************************************
	org	0x00
	goto	Init

	org 0x04
	goto Init 
	retfie 


;***********************************************************************
; Initialisierung
;
Init
	; IO-Pins
	bcf	STATUS, RP0		; Bank 0
	;clrf	GPIO			; aus!
	movlw	0x07
	movwf	CMCON			; Comparator aus
	bsf	STATUS, RP0		; Bank 1
	bcf	TRISIO,5		; alles output 
	bcf	TRISIO,4		; alles output

	bcf	TRISIO,2		; alles output
	bcf	TRISIO,1		; alles output
	bcf	TRISIO,0		; alles output

	bcf	STATUS, RP0		; Bank0

	; internen Taktgenerator kalibrieren
	bsf	STATUS, RP0		; Bank 1
	call	0x3FF
	movwf	OSCCAL			; 4-MHz-Kalibrierung
	bcf	STATUS, RP0		; Bank 0

	; Interrupt
	bcf	INTCON, GIE		; Int deaktiviert



;***********************************************************************
;Main 
Mainloop
bsf	GPIO,5		;
bsf	GPIO,4		;
bsf	GPIO,3		;
bsf	GPIO,2		;
bsf	GPIO,1		;
bsf	GPIO,0		;
	goto	Mainloop

;***********************************************************************

	end
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: PIC -Problem mit 12F675

Beitrag von xoexlepox »

Lass mal das "goto Init" vor dem "retfi" weg, vielleicht klappts dann...
Benutzeravatar
Sascha
Beiträge: 673
Registriert: Di 13. Aug 2013, 15:20
Wohnort: Irgendwo bei Heilbronn

Re: PIC -Problem mit 12F675

Beitrag von Sascha »

Auf 0x3FF steht immernoch kein retlw 0xfnord. Lass die Kalibrierung weg, der INTOSC ist auch ohne genau genug.
plottermeier
Beiträge: 1452
Registriert: Fr 16. Aug 2013, 14:32

Re: PIC -Problem mit 12F675

Beitrag von plottermeier »

Hi,

ne klappt auch nicht. So langsam glaube ich an nen Harwaredefekt. Aber alle 3 Pics aus der Lieferung verhalten sich gleich.

Jens
Benutzeravatar
Sascha
Beiträge: 673
Registriert: Di 13. Aug 2013, 15:20
Wohnort: Irgendwo bei Heilbronn

Re: PIC -Problem mit 12F675

Beitrag von Sascha »

Kannst du den Simulator in MPLAB bedienen? Versuchs mal damit. Poste nochmal den aktuellen Sourcecode, dann kann ichs auch mal versuchen. Mit welchem Brenner brennst du das Programm rein? Kann sein dass du dich mit der MCLR+INTOSC-Falle ausgesperrt hast und immer den selben Code probierst.
Benutzeravatar
gafu
Beiträge: 6388
Registriert: Mi 14. Aug 2013, 20:56
Wohnort: nahe Jena
Kontaktdaten:

Re: PIC -Problem mit 12F675

Beitrag von gafu »

Hi,

Mal ganz generisch nach dem programmer gefragt: kannst du verifizieren das dein programm tatsächlich im PIC gelandet ist, und korrekt übertragen wurde?

ansonsten nochmal genau im datenblatt lesen und kontrollieren, ob vielleicht die "nutzung" der pins korrekt eingestellt ist, bei den kleinen ist ja jedes beinchen doppelt und dreifach belegt.
ist der ADC aus? also CMCON, ANSEL und TRISIO nochmal nachvollziehen.

gruss, gafu

p.s. nicht zu viel auf den mplab simulator geben. ich hatte damals als ich mit pic hantiert habe, die sache wieder aufgegeben, weil programme im simulator funktionierten, aber auf der hardware nicht :(
Benutzeravatar
Sascha
Beiträge: 673
Registriert: Di 13. Aug 2013, 15:20
Wohnort: Irgendwo bei Heilbronn

Re: PIC -Problem mit 12F675

Beitrag von Sascha »

Guter Hinweis auf die Steuerregister der Peripherie, nicht dass da noch was anderes reinfunkt. Bei so nem simplen Programm sollte der SImu aber noch klarkommen :)
plottermeier
Beiträge: 1452
Registriert: Fr 16. Aug 2013, 14:32

Re: PIC -Problem mit 12F675

Beitrag von plottermeier »

Hallo,

hier erstmal der aktuelle Code:

Code: Alles auswählen

	list p=12f675

	#include <P12f675.INC>

	ERRORLEVEL      -302    	;SUPPRESS BANK SELECTION MESSAGES

; Configuration festlegen:
; kein Power on Timer, kein Watchdog, int-Oscillator, kein Brown out
	__CONFIG	_MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_OFF


;***********************************************************************
	org	0x00
	goto	Init

	org 0x04
	retfie 


;***********************************************************************
; Initialisierung
;
Init
	; IO-Pins
	bcf	STATUS, RP0		; Bank 0
	;clrf	GPIO			; aus!
	movlw	0x07
	movwf	CMCON			; Comparator aus
	bsf	STATUS, RP0		; Bank 1
	bcf	TRISIO,5		; alles output 
	bcf	TRISIO,4		; alles output

	bcf	TRISIO,2		; alles output
	bcf	TRISIO,1		; alles output
	bcf	TRISIO,0		; alles output

	bcf	STATUS, RP0		; Bank0

	; internen Taktgenerator kalibrieren
	bsf	STATUS, RP0		; Bank 1
	call	0x3FF
	movwf	OSCCAL			; 4-MHz-Kalibrierung
	bcf	STATUS, RP0		; Bank 0

	; Interrupt
	bcf	INTCON, GIE		; Int deaktiviert



;***********************************************************************
;Main 
Mainloop
bsf	GPIO,5		;
bsf	GPIO,4		;
bsf	GPIO,3		;
bsf	GPIO,2		;
bsf	GPIO,1		;
bsf	GPIO,0		;
	goto	Mainloop

;***********************************************************************

	end
Mit dem Simulator hab ich noch nichts gemacht. Ich verwende den PBrennerNG von Sprut, der macht nen Veryfy nach dem Brennen.
Das Hexfile trägt die Uhrzeit des Compilevorgangs. Ach die Tatsache, dass ich nach Aktivieren des MCLR 5V an den Pin legen muss, damit sich wirklich was tut,
lässt darauf schließen, dass der Code im PIC landet.
Ich verschiebe erstmal auf morgen, vielleicht sehe ich dann den Fehler.
Die Steuerregister hab ich mehrmals gecheckt, bevor ich gepostet habe, bin aber der Meinung, die sollten so stimmen.

Jens
Jannyboy
Beiträge: 1412
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: PIC -Problem mit 12F675

Beitrag von Jannyboy »

Du hast ein clrf ANSEL vergessen.
Der PIC hat einen ADC der ist defaultmäßig an.
Also die PIN von Analog auf Digital umschalten.

Edit: Siehe DB Seite 46
Antworten