Hallo zusammen! Ich habe bisher immer mit PIC16F877 oder ähnlichen
gearbeitet und nie Probleme gehabt. Jetzt wollte ich mal paar PWM'S mehr
nutzen und wollte daher auf einen PIC16F1527 umsteigen. Leider komme ich
nicht mal dahin, das HEX-File zu erstellen, da die MPASMWIN.exe wohl
leider den Controller nicht kennt, obwohl im MPLAB derjenige in der
Liste der möglichen auszuwählen geht. Ich hab dann mal eine
ASM-Template-Datei von Microchip genommen mit dem Gedanken, das Gerüst
müsste ja gehen, weil fehlerfrei. Leider gibt es da wieder nur den 1827
als TEMPLATE, dann eben den genommen und siehe da, geht auch nicht.
Kann mir jemand bitte einen Tip geben, hier muss doch etwas im Grundsatz
falsch sein oder fehlen?
Hier meine Software:
MPASM v4.02
MPLAB IDE v8.70
Win 7
Benutztes Template:
16F1827TEMP.ASM
Includedatei:
P16F1827.INC
Err-Datei:
Error[132] D:\ERZEUGUNG HEX\WISORE_V2.00\16F1827TEMP.ASM 37 : Unknown
processor (16F1827)
Message[301] D:\ERZEUGUNG HEX\WISORE_V2.00\P16F1827.INC 33 : MESSAGE:
(Processor-header file mismatch. Verify selected processor.)
Error[131] D:\ERZEUGUNG HEX\WISORE_V2.00\16F1827TEMP.ASM 51 :
Processor type is undefined
Error[131] D:\ERZEUGUNG HEX\WISORE_V2.00\16F1827TEMP.ASM 52 :
Processor type is undefined
Error[131] D:\ERZEUGUNG HEX\WISORE_V2.00\16F1827TEMP.ASM 80 :
Processor type is undefined
Error[126] D:\ERZEUGUNG HEX\WISORE_V2.00\16F1827TEMP.ASM 87 : Argument
out of range (0004 not between 0000 and 0000)
Warning[207] D:\ERZEUGUNG HEX\WISORE_V2.00\16F1827TEMP.ASM 88 : Found
label after column 1. (GOTO)
Error[122] D:\ERZEUGUNG HEX\WISORE_V2.00\16F1827TEMP.ASM 88 : Illegal
opcode (START)
Warning[207] D:\ERZEUGUNG HEX\WISORE_V2.00\16F1827TEMP.ASM 107 : Found
label after column 1. (RETFIE)
Warning[207] D:\ERZEUGUNG HEX\WISORE_V2.00\16F1827TEMP.ASM 119 : Found
label after column 1. (GOTO)
Error[108] D:\ERZEUGUNG HEX\WISORE_V2.00\16F1827TEMP.ASM 119 : Illegal
character ($)
Error[131] D:\ERZEUGUNG HEX\WISORE_V2.00\16F1827TEMP.ASM 122 :
Processor type is undefined
Nein, anders. Ich habe physisch einen 1527. Include-Datei gibt es, habe
mein eigenes ASM-File anfänglich erstellt und kam zu keinem fehlerfreien
hex-File.
Dann laß ich, dass es für alle PICs ein von Microchip vorgefertigtes
ASM-File gibt. Also das suchen, nehmen und schauen, ob das geht und was
ich anders machen muss in meinem eigenen. Mist, include gibt es, aber
das TEMPLATE.ASM für 1527 gibt es nicht. Also, denke ich, nimm einen
ähnlichen zum Test -> 1827, da gibt es sowohl TEMPLATE als auch
include-File, also das getestet. Geht auch kein hex-File zu erstellen,
die gleichen Fehler wie 1527. Folglich muss mir irgendein Softwarestand
fehlen.
Also jetzt bin ich einen Schritt weiter, daher erstmal vielen Dank für
eure Hilfe!
Jetzt geht schon mal ein hex-File raus obwohl noch mit Fehlern, die aber
sicher im Code-Detail zu beheben sind. Ich kann nicht versprechen, mich
hier nie wieder zu zeigen, aber ich versuch's. ;-)
Was mich noch wundert, dass auch jetzt noch kein Template-File für den
1527 in der Liste steckt, include-File sehr wohl .... was sie sich dabei
wohl gedenkt haben ...
Gruß Micha
Hallo,
möglicherweise weisst du nicht, dass vor ein paar Jahren eine neuere
Entwicklungsumgebung herausgegeben wurde, nämlich mplabx.
Die letzte Version(v5.30)ist zwar enorm gross, dafür aber kann man alles
von PIC und AVR programmieren was man will.
Gruss picfan
> zwar enorm gross
Fuer einen 16F1527 wuerde es schon reichen die richtigen Header
zu benutzen. Und nicht die von einem der nur so aehnlich klingt.
Ist doch eigentlich logisch. Selbst eine intelligente Amoebe
wuerde das hinkriegen.
Hallo an alle! Ich habe das grundsätzliche hinbekommen mit der richtigen
MPLAB-Version.
(Zu Dir "AUWEIA":
Deine süffisante Kritik passt nicht ganz, denn ich habe ja zu diesem
Zeitpunkt nur das HEX-File erstellt, und da ging es nur um den Ersatztyp
1827. Aber egal, inhaltsreiche Antworten gibts ja hier auch.)
Jetzt hab ich ein reines Programmier- oder Einstellungsproblem,
folgendes:
Ich möchte beispielsweise von PortB, der momentan so aussieht: 11100011
einfach das Pin 3 auch einschalten. Das geht auch mit BSF PORTB,3.
Jedoch gehen dabei alle anderen, also der gesamt PortB gleich mit aus.
Den Effekt kenne ich nicht. Was ist hier anders als bei früheren PIC's?
Ich dachte erst, dass der PIC-Simulator das falsch macht, aber in echt
siehts genau so aus.
Irgendwie lässt sich kein Pin ein- oder ausschalten, ohne alle anderen
Pins des betreffenden Ports auszuschalten.
Danke falls mir einer helfen kann! Micha
Nach weiteren nervigen Tests und Recherchen habe ich erkannt, dass es
wohl das read modify write problem sein müsste, was dafür verantwortlich
ist. mit anderen worten, früher (16F877 ...) war alles besser, denn da
ging das problemlos mit dem Setzen einzelner Port-Pins sowie auch mit
dem Lesen der Port-Pins bzw. des gesamten Ports. Hier bei dem 16F1527
kann ich noch nicht mal den Port lesen, wenn er als Ausgang fungiert.
Ich bewege LATB oder PORTB ins W und nichts kommt rein ins W, daran wird
das liegen, wenn ich ein Pin einschalte, aber alle anderen dabei
ausgehen, weil er den Port zwar ausliest, es aber eigentlich gar nicht
tut und somit alle anderen außer dem gesetzten als AUS sieht. Gibt es da
einen Haken, den ich noch nicht erkannt habe?
Michael schrieb:> Ich bewege LATB oder PORTB ins W und nichts kommt rein ins W,
Was bedeutet "nichts"? Ich dachte immer ein Bit ist entweder 0 oder 1,
"nichts" kommt da nicht vor.
MfG Klaus
Michael schrieb:> mit anderen worten, früher (16F877 ...) war alles besser, denn da> ging das problemlos mit dem Setzen einzelner Port-Pins sowie auch mit> dem Lesen der Port-Pins bzw. des gesamten Ports.
Hallo,
probier doch mal: "BSF LATB,3".
Im Gegensatz zum alten 877 besitzen die neueren Pic16 vor den Ports ein
Latch.
Gruss J.P.
Bei dem wenigem Code bleibt es bei einer Raterunde.
ANSELB gelöscht?
Und nach lesen des Dabla weißt du, r-m-w geht nur auf LATB ordentlich.
Lass die Versuche mit PORTB gleich sein.
Programmierst du eigentlich mit einem Pickit oder exotisch?
Hallo!
Es funktioniert nur so (hier schalte ich der Riehe nach alle Pins von
PortB ein):
CLRF SHADOWPORTB
MOVFW SHADOWPORTB
MOVWF LATB
CALL WARTE
CALL WARTE
CALL WARTE
MOVLW D'1'
IORWF SHADOWPORTB,F
MOVFW SHADOWPORTB
MOVWF LATB
CALL WARTE
CALL WARTE
CALL WARTE
MOVLW D'2'
IORWF SHADOWPORTB,F
MOVFW SHADOWPORTB
MOVWF LATB
CALL WARTE
CALL WARTE
CALL WARTE
MOVLW D'4'
IORWF SHADOWPORTB,F
MOVFW SHADOWPORTB
MOVWF LATB
CALL WARTE
CALL WARTE
CALL WARTE
MOVLW D'8'
IORWF SHADOWPORTB,F
MOVFW SHADOWPORTB
MOVWF LATB
CALL WARTE
CALL WARTE
CALL WARTE
MOVLW D'16'
IORWF SHADOWPORTB,F
MOVFW SHADOWPORTB
MOVWF LATB
CALL WARTE
CALL WARTE
CALL WARTE
MOVLW D'32'
IORWF SHADOWPORTB,F
MOVFW SHADOWPORTB
MOVWF LATB
CALL WARTE
CALL WARTE
CALL WARTE
MOVFW SHADOWPORTB
CALL WARTE
CALL WARTE
CALL WARTE
Ohne dieses "Schattenregister" geht es einfach nicht, da geht immer der
zu setzende Eingang an aber die anderen alle aus am selben Port.
ANSELB war 0, ich habe auch nur das LATB versucht zu setzen, und den
PORT zu lesen vorher statt des Schattenregisters, alles hat nichts
gebracht. Da frag ich mich, was dieser Schwachsinn soll, wenn er solche
Probleme macht??
Gleich ein neues Problem mit dem 1527, gleich vorher, es ist ein
PIC16F1527 und nicht LF.
Über 3,5V bleibt er einfach stehen und lässt sich auch nicht
programmieren, obwohl er lt. Datenblatt bis 5,5V verträgt und auch mit
5V laufen müsste. Gitb es da etwa eine
Konfigurationspflicht/möglichkeit, dass er mit 5V laufen soll??
neuer PIC Freund schrieb im Beitrag #6170559:
> Bei dem wenigem Code bleibt es bei einer Raterunde.
Zeig doch mal den kompletten Code, inklusive der Initialisierung.
Und ein Bild vom Aufbau wäre auch nicht schlecht.
Sonst können wir, wie neuer PIC Freund schon geschrieben hat, nur raten.
Gruß
John
Michael schrieb:> Gleich ein neues Problem mit dem 1527, gleich vorher, es ist ein> PIC16F1527 und nicht LF.> Über 3,5V bleibt er einfach stehen und lässt sich auch nicht> programmieren, obwohl er lt. Datenblatt bis 5,5V verträgt und auch mit> 5V laufen müsste. Gitb es da etwa eine> Konfigurationspflicht/möglichkeit, dass er mit 5V laufen soll??
Der Core arbeitet nur bis 3,3V, um in (und die IOs) mit 5V zu betreiben,
ist ein interner LDO verbaut und muß dann auch benutzt werden (inkl.
externen Lwo-ESR 100nF)!
Michael schrieb:> ich habe auch nur das LATB versucht zu setzen
Machen wir mal weiter in dieser fröhlichen Raterunde:
Die Port-Regiser und die Latch-Register befinden sich in
unterschiedlichen Speicherbänken.
Um auf die Latch-Register zuzugreifen muss vorher die entsprechende
Speicherbank gewählt werden.
So werden die Pins von Port B der Reihe nach eingeschaltet:
> Ich dachte erst, dass der PIC-Simulator das falsch macht, aber in echt siehts
genau so aus.
Das ist doch ein gutes Zeichen.
> Es funktioniert nur so
Und so
1
#include <stdint.h>
2
3
#include <xc.h>
4
5
void main(void) {
6
7
ANSELB = 0;
8
TRISB = 0;
9
WPUB = 0;
10
11
while (true)
12
{
13
uint_fast8_t i = 1;
14
LATB = 0;
15
while (i)
16
{
17
LATB |= i;
18
_delay(5);
19
20
i = (i << 1) & 0xFF;
21
}
22
}
23
24
return;
25
}
Der compiler macht sogar das mit dem BANKSEL immer richtig. Die
Befürchtung das selbiges auf 0 steht, habe ich auch.
Wenn du ein Pickit benutzt, warum dann nicht einfach mal Break und die
Pins im IO-View toggeln?
Ratebeitrag:
CALL WARTE hat Seiteneffekte.
Genau so wie John es schreibt, selbstvertändlich sind PORTB und LATB
nicht nicht in derselben Bank. Wenn man mit Assembler arbeitet, sollte
das eigentlich klar sein.
Auch der 877 hatte verschiedene Banken für die SFR's.
Hallo an alle!
Danke für den Tipp mit den Banken hinsichtlich der LATB-Register, die ja
in Bank 2 sind (DAS HÄTTE MIR NICHT PASSIEREN DÜRFEN), ich schäme mich,
bin überlastet. :-) Das Problem sei geklärt. Weiteres (zum VCAP
3,3/5V-Problem) evtl. später .... Nochmal vielen Dank!
So liebe Leute, ich bins mal wieder - leider :(
Gecheckt ist jetzt die 3,3V-Problematik, sie gabs gar nicht, PIC blieb
stehen wegen Programmfehler - und der hält mich jetzt schon tagelang
auf:
Vielleicht weiß da einer einen Rat. Es geht um I2C, so wie es bisher mit
einem PIC16F877 und einem EEPROM immer funzte, hie rsoll aber ein
PIC16F1527 als Master mit einem 877 als Slave reden. Leider geht noc
nicht mal ein kleinster Anfang. Frage dazu:
Warum wird das SSP1IF-Flag nicht gesetzt (Deswegen bleibt er bei dieser
Abfrage hängen). Ich habe alles mögliche probiert und gelesen, weiß nu
echt nicht mehr weiter. Mann was für ein Drama mit diesen englishcen
Beschreibungen. :)
Hier bleibt er hängen:
WAITMSSP ; Warte bis SSPIF gesetzt ist
BANKSEL BANK2
BSF LATB,2
BANKSEL BANK0
BANKSEL BANK0
BTFSS PIR1,SSP1IF
GOTO $-1
BCF PIR1,SSP1IF
RETURN
Code hängt mit an, paar LED-(Port)-Befehle zum erkennen, dass überhaupt
was läuft, PWM's hier Nebensache, die gehen immerhin. :)
Danke für Eure Hilfe, wenn möglich!!