PIC -Problem mit 12F675

Der chaotische Hauptfaden

Moderatoren: Sven, Heaterman, TDI, Finger

PIC -Problem mit 12F675

Beitragvon plottermeier » Fr 16. Aug 2013, 22:04

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
plottermeier
 
Beiträge: 826
Registriert: Fr 16. Aug 2013, 14:32

Re: PIC -Problem mit 12F675

Beitragvon Fritzler » Fr 16. Aug 2013, 22:08

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.
Benutzeravatar
Fritzler
 
Beiträge: 5357
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Friedrichshagen/Am Wasserwerk

Re: PIC -Problem mit 12F675

Beitragvon plottermeier » Fr 16. Aug 2013, 22:27

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.
plottermeier
 
Beiträge: 826
Registriert: Fr 16. Aug 2013, 14:32

Re: PIC -Problem mit 12F675

Beitragvon Fritzler » Fr 16. Aug 2013, 22:29

Mein Post war nur auf eine spätere UART Kommunikation bezogen.
Zum jetzigen Problem trägt das rein garnix bei ;)
Benutzeravatar
Fritzler
 
Beiträge: 5357
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Friedrichshagen/Am Wasserwerk

Re: PIC -Problem mit 12F675

Beitragvon xoexlepox » Fr 16. Aug 2013, 22:47

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
xoexlepox
 
Beiträge: 4291
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: PIC -Problem mit 12F675

Beitragvon Sascha » Fr 16. Aug 2013, 23:07

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.
Benutzeravatar
Sascha
 
Beiträge: 653
Registriert: Di 13. Aug 2013, 15:20
Wohnort: Irgendwo bei Heilbronn

Re: PIC -Problem mit 12F675

Beitragvon plottermeier » Fr 16. Aug 2013, 23:30

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
plottermeier
 
Beiträge: 826
Registriert: Fr 16. Aug 2013, 14:32

Re: PIC -Problem mit 12F675

Beitragvon xoexlepox » Fr 16. Aug 2013, 23:35

Lass mal das "goto Init" vor dem "retfi" weg, vielleicht klappts dann...
Benutzeravatar
xoexlepox
 
Beiträge: 4291
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: PIC -Problem mit 12F675

Beitragvon Sascha » Fr 16. Aug 2013, 23:39

Auf 0x3FF steht immernoch kein retlw 0xfnord. Lass die Kalibrierung weg, der INTOSC ist auch ohne genau genug.
Benutzeravatar
Sascha
 
Beiträge: 653
Registriert: Di 13. Aug 2013, 15:20
Wohnort: Irgendwo bei Heilbronn

Re: PIC -Problem mit 12F675

Beitragvon plottermeier » Fr 16. Aug 2013, 23:40

Hi,

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

Jens
plottermeier
 
Beiträge: 826
Registriert: Fr 16. Aug 2013, 14:32

Re: PIC -Problem mit 12F675

Beitragvon Sascha » Fr 16. Aug 2013, 23:59

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
Sascha
 
Beiträge: 653
Registriert: Di 13. Aug 2013, 15:20
Wohnort: Irgendwo bei Heilbronn

Re: PIC -Problem mit 12F675

Beitragvon gafu » Sa 17. Aug 2013, 00:06

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
gafu
 
Beiträge: 2937
Registriert: Mi 14. Aug 2013, 20:56
Wohnort: nahe Jena

Re: PIC -Problem mit 12F675

Beitragvon Sascha » Sa 17. Aug 2013, 00:11

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 :)
Benutzeravatar
Sascha
 
Beiträge: 653
Registriert: Di 13. Aug 2013, 15:20
Wohnort: Irgendwo bei Heilbronn

Re: PIC -Problem mit 12F675

Beitragvon plottermeier » Sa 17. Aug 2013, 01:03

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
plottermeier
 
Beiträge: 826
Registriert: Fr 16. Aug 2013, 14:32

Re: PIC -Problem mit 12F675

Beitragvon Jannyboy » So 18. Aug 2013, 13:42

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
Jannyboy
 
Beiträge: 604
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg


Zurück zu Allgemeine Diskussion

Wer ist online?

Mitglieder in diesem Forum: Chemnitzsurfer, climber, Fritzler, GregorB, Hansele, Majestic-12 [Bot], soischswore, video6 und 23 Gäste

span