ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

1

Sonntag, 11. Januar 2009, 13:55

Ich möchte nicht aus der Übung kommen und habe gleich wieder Fragen!

Hallo Leute,
zwei Fragen stehen an, aber erst mal zur ersten.
Mit den PIC 12xxx hatte ich mich dank der Hilfe von Thomas ganz gut
eingearbeitet.
Nun habe ich mir den Pic 16F627A vorgenommen und auf der Oberfläche
MPLAB ein erstes kleines Programm geschrieben, um Zeiten zu messen
(mit LOOP1 bzw. 2 und 3). Einfach nur LED EIN / LED AUS.
Hierzu meine erste Frage:
Habe ich im Quelltext.asm eine Möglichkeit, ein Teil davon, was ich später
in einem anderen Quelltext verwenden möchte, evtl. anzuschwärzen,
abzuspeichern unter einem anderen code als asm und diesen dann in der
anderen Datei.asm einzufügen?
Beispiel: In GFA-Basic kann ich das angeschwärzte als .LST Datei abspeichern.
In einer Datei .GFA kann ich es dort einfügen, wo gerade der Corser steht.
Zur zweiten Frage: habe ich wieder bei dieser einfachen LED Datei bald
durchgedreht. Sie ist zwar gelöst, aber sehr merkwürdig, was für Spezies.
Vielleicht kann ich Euch was berichten, wovon man lernen kann.

Viele Grüße

Rolf

2

Sonntag, 11. Januar 2009, 19:18

RE: Ich möchte nicht aus der Übung kommen und habe gleich wieder Fragen!

Hallo Rolf,

Zitat

Original von ro.heg
Hierzu meine erste Frage:
Habe ich im Quelltext.asm eine Möglichkeit, ein Teil davon, was ich später
in einem anderen Quelltext verwenden möchte, evtl. anzuschwärzen,
abzuspeichern unter einem anderen code als asm und diesen dann in der
anderen Datei.asm einzufügen?

Das geht ganz einfach: Du markierst den Teil, den Du kopieren willst, mit der Maus (dazu linke Maustaste festhalten und dabei über den Text fahren), gehst dann auf "Edit/Copy" oder drückst einfach [Strg]+C (das ist eigentlich in fast allen Windows-Programmen die Standard-Tastenkombi zum Kopieren), dann wechselst Du in das Fenster mir der Datei, wo Du den Text einfügen willst, stellst den Cursor an die richtige Stelle und wählst "Edit/Paste", oder drückst [Strg]+V zum Einfügen.

Zitat


Zur zweiten Frage: habe ich wieder bei dieser einfachen LED Datei bald
durchgedreht. Sie ist zwar gelöst, aber sehr merkwürdig, was für Spezies.
Vielleicht kann ich Euch was berichten, wovon man lernen kann.

Ähm - wie lautet da die Frage? Oder fehlt bei dem Beitrag evtl. noch ein Datei-Anhang, aus dem die Fragestellung hervorgeht?

Viele Grüße,

Thomas

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

3

Dienstag, 13. Januar 2009, 14:01

Hallo Thomas,
danke für den Tip!
Und jetzt wirds spannend. Ich setze vorraus, daß ich mir im Frühjahr 2008
die Progr.-Umgebung für Pics von der Fa. Vellemann zugelegt hatte.
Mein ruhendes Grundwissen von ca. 10 Jahren sollte wieder in Fahrt kommen.
Das Packet enthielt auch zwei Demoprogramme für den 16F627A, die ich mit
erstellter Hardware zum laufen brachte. D.h. einfache LED Programme.
include Dateien gab es hier nicht, die _confic xxxx war mit vielen Anweisungen
bestückt. 5 Volt vom Netzteil angelegt und die Schose lief ohne aussteigen oder
wie wir sagen aufhängen.
Dann kam die Zeit mit dem Ortungspieper (PIC12F629) auch 5 Volt vom Netzteil
Auf einer umfangreichen Eisenbahnanlage mit allen Schnikschnaks steht an
einer Baustelle ein elektrisch getriebener Krahn der Fa. Märklin.
Dieser hat 5 Funktionen
1. AUF soll zeitlich ca. 10 Secunden laufen
2. AB wird über eine Lichtschranke abgefragt
3. Linkslauf
4. Rechtslauf beides wird über Endlagenschalter abgefragt
5. Lastmagnet EIN / AUS
Für das ermitteln der AUF Zeit hatte ich mir eine einfache LED Schaltung
ausgedacht (siehe ZIP-Datei)
Beim ersten Test blinkt die LED etwa 3x und bleibt dunkel...mh!
Versorgung ab und neu wieder das gleiche, aber diesmal warens mehr Blinkphasen.
Der Assembler hatte keinen Fehler angezeigt, ich war ratlos.
Versorgung mit Tantals u. 100nF direkt am Sockel abgeblockt.
Oh, dachte ich, A3 liegt ja offen, also mit 10 K gegen Plus
Nichts brachte Erfolg, ich stand am Ende meiner Kunst.
Auffallend war, daß sich das Programm nicht aufgehangen hatte, denn nach
Betätigen von Taste "Start" lief der Zyklus iweder los.
Über Configur / Select Device hatte ich PIC16F627A angegeben.
Ich schaute so meine Lipos an und dachte, nimm doch einen dreier,
einen 5 Volt Regler dahinter und siehe da, das Programm lief.
Ich hatte mit Netzteil die Demoprogr. und ca. 8 St. Ortungspieper gebaut.
Ich werde den Verdacht nicht los, das es an der mageren Configuration liegt.
So sieht diese bei Vellemann aus:
__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON

& _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

Was mag das nur sein? Es läuft jetzt, aber nur mit meinen Lipo-Trick!

Viele Grüße
Rolf
Ich schieb das erst mal rüber, Zip Kommt danach.

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

4

Dienstag, 13. Januar 2009, 14:08

mal sehen wie es klappt mit der ZIP-Datei
»ro.heg« hat folgende Datei angehängt:
  • pic16fzeit_02.zip (1,3 kB - 3 mal heruntergeladen - zuletzt: 10. April 2014, 11:47)

5

Mittwoch, 14. Januar 2009, 00:48

Hallo Rolf,

ich denke nicht, daß es an der Config-Einstellung liegt.
Wie hast Du Deine Reset-Schaltung aufgebaut? Dort sollte auf jeden Fall ein Pull-Up Widerstand hin! Denn Dein Programm dürfte, wenn es einmal durch Low-Pegel an Port A0 ins Blinken gekommen ist, nicht mehr da herauskommen! Der einzige Weg zurück, den ich sehe, ist über einen Hardware-Reset, der entweder durch zu niedrige Versorgungsspannung, oder eben einen undefinierten Pegel am MCLR-Eingang (Pin 4), ausgelöst wird.

Daß es am Netzteil Probleme gibt, es mit den LiPos aber so aussieht, als wäre alles in Ordnung, kann evtl. daran liegen, daß sich freie Eingänge eher etwas Störpegel "einfangen", wenn die Schaltung irgendwie mit am Stromnetz hängt, als wenn sie völlig isoliert nur mit einem Akku verbunden ist.

Viele Grüße,

Thomas

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

6

Mittwoch, 14. Januar 2009, 11:35

ja, alle Eingänge (A0 bis A5) sind mit 10K gegen Plus abgebunden.
A4 wird nicht benötigt.
Ich werde mal _BODEN_ON auf BODEN_OFF stellen und Dir berichten.

Grüße

Rolf

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

7

Donnerstag, 15. Januar 2009, 13:56

Hallo Thomas,
heute morgen dachte ich schon, ich wär der Krankheit auf der Spur.
Erstmal den kranken Zustand wieder hergestellt. Es kam auch vor,daß er sich ganz aufgehangen hat.
Masseleitung verlegt, da die über drei Ecken lief...bringt nichts!
Und dann kam ich zu einer sehr merkwürdigen Erscheinung:
Skop an RB5 / Pinn 11 gelegt,von wo gegen + die LED über 470R angesteuert wird.
Als die LED im AUS Zustand lief, schwappte das Signal auf ca. 5V HIGH
und bildete sich ein Rechtecksignal in einer Periodenzeit von 20 ms
Impulshöhe ca. 1,5 Vss von Plus gemessen. Ach dachte ich tausche 470R
gegen 1K....denkste. Wenn die merkwürdige Impulsfolge kam war Feierabend.
Übrigens ist es schon der zweite PIC.
Heute Abend mach ich Nägel mit Köpfen und schmeis den alten Pentium
mit Vellemann an, da steckt doch irgendwie der Teufel drin.
So schnell gebe ich nicht auf.

Grüße

Rolf

8

Freitag, 16. Januar 2009, 00:41

Hmmm - 20ms klingt sehr nach 50 Hz Netzfrequenz!
Hat vielleicht Dein Netzteil einen Schuss? Miss Doch einfach mal mit dem Oszi die Versorgungs-Gleichspannung, am besten direkt am PIC. Irgendwie werde ich das Gefühl nicht los, daß der Fehler außerhalb des PICs liegt...

Viele Grüße,

Thomas

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

9

Freitag, 16. Januar 2009, 10:16

Hallo Thomas,
ich glaube, bin der Sache dicht auf der Spur, oder habe sie schon gelöst!
Hatte noch einen Ortungspieper von den ersten mit nen 16F627A als Aufdruck.
Mit den Netzteil lief hier alles einwandfrei.
Mein kranker hatte aber 16F627-4/P
Und jetzt kommt es:
Programmiert hatte ich ihn mit eingestellt auf PIC16F627A, als include-Datei
auch P16F627A.INC, den Programmer auch auf 627A
Das Oszillatorsignal an Pin 15 sah sehr merkwürdig aus.Der Sinus mit nur 3,3Vss
hatte sich um ca.1 Volt gegen GND nach oben verschoben.
Beim heilen "A" TYP waren aber satte 4 Vss ohne Verschiebung zu sehen.
Also habe ich den Quelltext geändert, indem ich include auf P16F627.INC
gewählt habe. (Die Datei ist nähmlich vorhanden). Configuration und
Programmer auch auf 627 und jetzt ist das Taktsignal an Pin 15 mit 4 Vss
sauber zu sehen.
Und siehe da, die LED schaltet EIN/AUS was sagst Du nun? Sch...Technik!

Zum Schluß noch eine Erkenntniss:
Beim A Typ ist an Pin 16 ein Sinus von ca. 2 Vss zu sehen, Pin 15 = 1,8 Vss
beim 04/P an Pin 16 eine konstante Gleichspann. von ca. 1,8 Volt
an Pin 15 ein Sinus von 4 Vss.
Bei beiden läuft die negative Halbwelle an der Nullinie vorbei.

So, jetzt kann es mit den Krahn weiter gehen.

Grüße

Rolf

10

Freitag, 16. Januar 2009, 11:21

Hi Rolf,

aha, scheint also ein Problem mit dem Oszillator zu sein! Allerdings ist mir die Sache immer noch nicht geheuer, denn z.B. bei den Bits im Config-Word zur Oszillator-Einstellung sehe ich keinen Unterschied zwischen dem 627 und 627A !?
Naja, wie man sieht, sollte man scheinbar doch immer die exakt passende INC-Datei einbinden.
Wenn's bei der Frequenz nicht so exakt drauf ankommt (oft ist es ja egal, ob aus 10s mal 10,2 s oder 9,8 s werden), lieber den internen Oszillator nehmen! Damit spart man sich auch evtl. Ärger mit unwilligen oder defekten Quarzen oder Keramik-Resonatoren.

Grüße,

Thomas

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

11

Sonntag, 18. Januar 2009, 13:07

Hallo Thomas,
nun habe ich den externen Osz. entfernt, da mir die 27pF Keramiks nicht
vertrauenserweckend sind und Styroflex habe ich nicht.
Also die Config umgestellt auf _INTRC_OSC_NOCLKOUT und siehe da,
nichts tut sich!
3FF0 ist das Conficurationsergebnis, es kann nicht laufen mit der NULL.
Mit CLKOUT am Ende kommt 3FF1 heraus aber das ist XT externer Takt.
Alle Versuche scheitern, ich komme nicht zum 3FE4 ( wie beim Pic12Fxx)
oder zumind. 3FF4.
Mit _INTOSC_OSC_NOCLKOUT hab ich es auch versucht.
Was mach ich denn nur wieder falsch!!
Können die Pins 16 und 15 offen liegen?

Viele Grüße

Rolf

12

Montag, 19. Januar 2009, 02:01

Hallo Rolf,

Zitat

Original von ro.heg
Hallo Thomas,
nun habe ich den externen Osz. entfernt, da mir die 27pF Keramiks nicht
vertrauenserweckend sind und Styroflex habe ich nicht.

Keramik-Kondis sollten schon ok sein.

Zitat


Also die Config umgestellt auf _INTRC_OSC_NOCLKOUT und siehe da,
nichts tut sich!
3FF0 ist das Conficurationsergebnis, es kann nicht laufen mit der NULL.
Mit CLKOUT am Ende kommt 3FF1 heraus aber das ist XT externer Takt.
Alle Versuche scheitern, ich komme nicht zum 3FE4 ( wie beim Pic12Fxx)
oder zumind. 3FF4.

wieso meinst Du, daß da dasselbe Config-Word, wie beim 12Fxxx herauskommen soll? Es sind doch verschiedene Prozessoren, und die Config-Bits können sich sehr wohl unterscheiden! (tun sie hier auch)

Zitat


Mit _INTOSC_OSC_NOCLKOUT hab ich es auch versucht.

ist im INC-File beides das gleiche (H'3FFC')

Zitat


Was mach ich denn nur wieder falsch!!
Können die Pins 16 und 15 offen liegen?

ja, mit internem Oszillator brauchen die beiden Pins nicht beschaltet zu werden. Es sind ja dann ganz normale I/O-Ports.

Bin gerade auf die wahrscheinliche Ursache des Problems gestoßen:
Der 16F627 verfügt über einen "Low Voltage" (=niedrige Spannung) Programmiermodus. Der läßt sich über das Config-Wort de-/aktivieren (_LVP_ON bzw. _LVP_OFF). Standardeinstellung ist "aktiviert"!
Wenn LVP aktiviert ist, schaltet ein High-Pegel an RB4 (Pin 10) den Chip in den Programmiermodus!
Versuch mal, den Pin auf Masse zu legen, oder (besser): programmiere den Chip mit "_LVP_OFF" im Config-Wort, dann ist RB4 auch I/O-Port.

Viele Grüße,

Thomas

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

13

Montag, 19. Januar 2009, 10:08

Hallo Thomas,
danke für Deinen Tip!
LVP auf OFF gesetzt...nichts, der letzte Wert blieb bei NULL.
Es ließ mir heute Morgen keine Ruhe.Was hab ich gemacht?
Auf der MPLAB-Oberfläche auf Conficure / Configurations Bit und konnte
unter Value das Config. Ergebnis sehen. Als ich oben den Haken wegnahm,
konnte ich darin herum spielen (Enabled / Disabled) wobei ich jedes mal
das neue Ergebnis sah.
Der Watchdog Timer stand auf OFF. Als ich Ihn auf ON stellte, setzten sich die
letzten 4 Bits von "0" auf 4. Habe den Quelltext korrigiert in _WDT_ON und heute werde ich das Programm neu hinein schieben.
Werde Dir berichten.

Viele Grüße

Rolf

14

Montag, 19. Januar 2009, 11:42

Hallo Rolf,

schade - ich dachte, mit dem "Low Voltage Programming" in Verbindung mit einem offenen oder per Pull-Up auf 1 gelegten RB4 hätten wir den Grund für die Funktionsprobleme....
(kann hier auch leider nix probieren, da ich keinen 16F627 habe)

Aber zu Deiner Arbeit mit dem Config-Word:
Du scheinst Dich da dauernd auf den Hex-Wert zu konzentrieren und versuchst, die Symbole "hinzubasteln", bis ein von Dir erwarteter hexadezimal-Wert herauskommt.
Das ist mit Sicherheit der falsche Ansatz! Wie kommst Du überhaupt auf den "Wunsch-Hexwert" (z.B. daß die letzte Hex-Ziffer nicht 0 sein soll)? Die Übernahme des Wertes aus anderen Projekten mit anderen Prozessortypen ist auf jeden Fall ganz falsch, weil die Bits im Konfig-Wort bei unterschiedlichen Prozesoren unterschiedlich angeordnet sind und sich auch der Funktionsumfang von Typ zu Typ unterscheidet! Der Zahlenwert des Konfig-Wortes für einen 12F629 passt garantiert nicht für den 16F627!
Wenn man mit dem Config-Wert etwas zahlenmäßig macht, ist das nur in Verbindung mit dem Datenblatt des verwendeten Prozessors sinnvoll, indem man es dort nach Bits auseinanderdröselt und sich die entsprechenden Funktionen bitweise einstellt.

Mit den Symbolen, wie sie in der Zeile "__config ..." angegeben werden, ist das nicht notwendig und man kümmert sich dann auch gar nicht mehr um das Ergebnis in Hex.

Zum WDT: wenn Du den Watchdog ("Wachhund") Timer einschaltest, musst Du ihn in Deinem Programm in regelmäßigen Abständen (alle paar Millisekunden) mit dem Befehl "clrwdt" zurücksetzen, sonst führt der Prozessor einen Reset aus. Das ist nämlich der ursprüngliche Sinn des Wachhunds: wenn sich das Programm z.B. aufgehängt hat und den Wachhund nicht mehr bedient, startet der Prozessor neu.

Viele Grüße,

Thomas

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

15

Montag, 19. Januar 2009, 12:44

mh... alles wieder zurück! Das Programm läuft nicht.
Anhand meiner Englischkenntnisse laufe ich hier ins "Uferlose"
Ich werde erstmal den alten Zustand mit externen Clock wieder herstellen,
um die Sache wieder zum laufen zu bekommen.

Grüße und Danke für Deine Mühe

Rolf

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

16

Montag, 19. Januar 2009, 19:02

Hallo Thomas,
Du hast ja Recht; wenn ich Dich nicht hätte.
Habe das Datenblatt auf Seite 54 vom Pic12 geöffnet und sehe,
die Configuration sieht ja ganz anders aus, als beim PIC16F627 (Seite 96)
Hier sind die Bits 4 und 1/0 von Bedeutung
D.h. 100 für internen Takt.
Es gibt aber noch eine Note 4 versteh ich noch nicht!

Grüße

Rolf

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

17

Mittwoch, 21. Januar 2009, 09:41

Hallo Thomas,
nun ist es endlich doch geschafft!
Es hat mir keine Ruhe gelassen mit den internen Takt
Habe im Datenblatt vom 16F627 lange die Seite 96 studiert und mit der
vom 12F629 verglichen.
So wie Du es nennst "hingebröselt"
Bit 13 - 10 so auf 1 gelassen (_CP_OFF)
Bit 8 auf 1 (_DATA_CP_OFF)
Bit 7 auf 0 (_LVP_OFF)
Bit 6 auf 1 (_BODEN_ON)
Bit 5 auf 1 (_MCLRE_ON)
Bit 4 auf 1 = FOSC2
Bit 3 auf 0 (_PWRTE_ON)
Bit 2 auf 0 (_WDT_OFF)
Bit 1 auf 0 = FOSC1
Bit 0 auf 0 = FOSC0
Bit 4; 1; 0 ergab sich aus _INTRC_OSC_NOCLKOUT
Programmiert als "A" Typ und es läuft jetzt wie geschmiert.

Meinen Dank nochmals.

Viele Grüße

Rolf

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

18

Freitag, 18. Dezember 2009, 14:10

Hallo Thomas,
ich stehe wieder mal auf dem Schlauch.
Vor mir ein ca. 2 Seiten Testprogramm mit einem PIC16F627A
Beim Übersetzen der Datei kommen 11 Warnungen und immer wie folgt:

Warning(202) Argument out of range. Least significant bits used

btfsc PORTA,sw1

habe das PORTA,sw1 schon näher an btfsc rangerückt, bringt nichts!

Was mache ich nur verkehrt?
4 Schalter von sw0 bis sw3 über CBLOCK und ENDC definiert.

2. Frage: (ich weiß schon, Datenblätter) sitzen das Register TRISA und
TRISB auf Bank 0 oder 1

Die PICs von Reichelt sind gekommen, aus Neugierde werde ich den
Servotest aufbauen.

Viele Grüße und Danke im vorraus

Rolf

19

Freitag, 18. Dezember 2009, 14:42

Hallo Rolf,

"Argument out of range" hat nichts mit der Zeilenposition des Arguments zu tun, sondern bedeutet, daß eine Zahl außerhalb des gültigen Wertebereiches liegt. Also, wenn Du z.B. schreibst: "movlw 350" kommt die Warnung, weil das W-Register nur 8 Bit breit ist und demnach die größte mögliche Zahl 255 (=0xFF) ist. Der Assembler nimmt dann einfach die niederwertigen Bits, also nach "movlw 0x1234" steht im W-Register 0x34.

Beim Befehl "btfsc PORTA, sw1" wird als Argument (sw1) eine Bitnummer erwartet, die im Bereich 0..7 liegt.

TRISA und TRISB liegen in Bank 1.

Viele Grüße,

Thomas

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

20

Montag, 21. Dezember 2009, 12:34

Hallo Thomas,
danke für Deine Hilfe, jetzt sind die Warnungen weg.
Dies ist keine Eigenentwicklung von mir; es lag schon über ein Jahr von
der Fa. Vellemann in meinem Ordner. Also somit meine Kenntnisse wieder mal
aufzufrischen.
Erstmal hat mich nach dem Brennen das richtig gefoppt. Nach schieben
eines der 4 Schalter tat sich garnichts, egal welcher Schalter absolut
PTOTMAX (so sagten wir in längst vergangenen Zeiten).
Bis ich erkannte, daß ich den Schalter wieder zurück schieben muß.
Eine Merkwürdigkeit bleibt. Es kommen im Output-Fenster :
3x Message (302) Register in operand not in bank 0
Ich achte doch darauf, daß ich mit bsf STATUS,RP0 auf Bank1 umschalte
um TRISA und TRISB zu aktivieren, danach mit bcf --- wieder auf Bank0.

In Deiner Datei für Toni kommt das nicht vor, mh...

Ich wünsche Dir ein frohes Fest

Rolf

Anlage: pic16demo2.zip

Zum Schluß: habe ein 2 Servo zerlegt gemessene Spannung über den Poti
2.140 Volt, werde 2 Widerst. mit 2K7 Ohm nehmen. Komme im Thread
von Toni darauf zurück.
»ro.heg« hat folgende Datei angehängt:
  • pic16demo2.zip (1,74 kB - 2 mal heruntergeladen - zuletzt: 28. April 2014, 09:59)