Seite 1 von 1
PIC -Problem mit 12F675
Verfasst: Fr 16. Aug 2013, 22:04
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
Re: PIC -Problem mit 12F675
Verfasst: Fr 16. Aug 2013, 22:08
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.
Re: PIC -Problem mit 12F675
Verfasst: Fr 16. Aug 2013, 22:27
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:
GPIO1 und 2 so:
nur GPIO5 zeigt die erwarteten 5 Volt dauerhaft.
Re: PIC -Problem mit 12F675
Verfasst: Fr 16. Aug 2013, 22:29
von Fritzler
Mein Post war nur auf eine spätere UART Kommunikation bezogen.
Zum jetzigen Problem trägt das rein garnix bei
Re: PIC -Problem mit 12F675
Verfasst: Fr 16. Aug 2013, 22:47
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
Re: PIC -Problem mit 12F675
Verfasst: Fr 16. Aug 2013, 23:07
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.
Re: PIC -Problem mit 12F675
Verfasst: Fr 16. Aug 2013, 23:30
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
Re: PIC -Problem mit 12F675
Verfasst: Fr 16. Aug 2013, 23:35
von xoexlepox
Lass mal das "goto Init" vor dem "retfi" weg, vielleicht klappts dann...
Re: PIC -Problem mit 12F675
Verfasst: Fr 16. Aug 2013, 23:39
von Sascha
Auf 0x3FF steht immernoch kein retlw 0xfnord. Lass die Kalibrierung weg, der INTOSC ist auch ohne genau genug.
Re: PIC -Problem mit 12F675
Verfasst: Fr 16. Aug 2013, 23:40
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
Re: PIC -Problem mit 12F675
Verfasst: Fr 16. Aug 2013, 23:59
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.
Re: PIC -Problem mit 12F675
Verfasst: Sa 17. Aug 2013, 00:06
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
Re: PIC -Problem mit 12F675
Verfasst: Sa 17. Aug 2013, 00:11
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
Re: PIC -Problem mit 12F675
Verfasst: Sa 17. Aug 2013, 01:03
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
Re: PIC -Problem mit 12F675
Verfasst: So 18. Aug 2013, 13:42
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