Lieber Besucher, herzlich willkommen bei: RCLine Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

1

Sonntag, 15. Juni 2008, 13:46

PIC-Controller, was für Profis

ja da habe ich mir was vorgenommen!
Gibt es Könner auf diesem Sektor?
Grüße
Rolf

K_Mar

RCLine User

Wohnort: D-76337 Waldbronn-Reichenbach (Karlsruhe) 1988-2005 Seesen/Harz; davor Hannover Modellbau seit 1974

Beruf: Dipl.Ing./Leistungselektr.entw. mW-MW z.Z.Antriebstechn.,früher Stromvers. (incl.Treiber+Messtechn.)

  • Nachricht senden

2

Sonntag, 15. Juni 2008, 14:04

RE: PIC-Controller, was für Profis

Hallo,
was hast Du Dir vorgenommen, dann kann man mehr sagen.
Welche Größe / Leistungsfähigkeit.

Gruß Klaus
Fahrzeuge auf dem Wasser bewegen macht Spaß und ist ein optimaler Testbereich für Elektronikentwicklungen

Real-Fly

RCLine User

Wohnort: Rinteln

Beruf: Schüler

  • Nachricht senden

3

Sonntag, 15. Juni 2008, 16:21

PIC ist nicht gerade einfach finde ich.
Muss direkt Programmiert werden in Assambler z.B.
Gruß Pascal :ok:

Fliegt nicht gibs nicht ! :dumm: :dumm:
:ok:

Baupläne und anderes zum Modellbau http://www.modellbauplaeneonline.de.vu/

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

4

Sonntag, 15. Juni 2008, 19:49

Hallo Leute,
Modellflug ist mein Hobby!
Mir schwebt vor einen Ortungspieper zu erstellen, und das mit einem PICXXX
Vor 13 Jahren habe ich ein Quellprogramm geschrieben und wurde von einem
Profi in einem PIC16C71 eingebrannt.
Aber die Zeit ist ja nicht stehen geblieben, und habe bei Conrad
eine Programmier / Expermentier-Einheit von der Fa. Vellemann kommen lassen.
Dazu bestellt 3 St. PIC16F627 (mit EEPROM)
Eine Disk. mit asm Dateien Assembler und eine Brenner .exe Datei
ist vorhanden.
Alle asm Dateien lassen sich brennen und funktionieren einwandfrei.
Aber mit meiner vor 13 Jahren rührt sich garnichts! Habe sie modifiziert
nach neuesten Stand... nichts!
Also zurück zum Pieper.
A0-A3 als Input
B0-B5 als output
Nach Reset soll über 4DIP-Schalter 4 verschiedene Zeiten ablaufen
A0 Test ca. 10 Sec.
A1 ca. 5 Minuten
A2 ca. 10 " "
A3 ca. 20 " "
Nach Ablauf der Zeit soll an PortB z.B. Pin 0 im 5 Sec. Rythmus
das Signal High/Low zeigen, bis ich die Versorgung abschalte oder Reset

Hört sich doch einfach an, naja!
Habe manches Flugmodell durch so eine Art Pieper wiedergefunden

Grüße
Rolf

5

Sonntag, 15. Juni 2008, 22:25

Der Befehlssatz des 16C71 sollte sich nicht so stark von dem des 16F627 unterscheiden. Eine Portierung eines funktionierenden 16C71-Programms sollte daher kein grosses Problem sein.

Hast du das Datenblatt des 16F627 genau durchgelesen? (config-word, Oszillator, etc)

Ein häufiger Fehler bei diesem Prozessor ist z.B. nicht daran zu denken, dass die Komparatoreingänge nach dem Reset auf Port A liegen. Wenn du A0-A3 als digitale Eingänge verwenden willst, musst du das dem PIC im CMCON Register mitteilen:

include "p16f627.inc"
....
movlw 0x07
movwf CMCON
.....

Grüße
Claus

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

6

Montag, 16. Juni 2008, 14:05

Hallo Klaus,
danke für Deine Antwort!
Hast Recht, die meisten Befehle sind identisch, geändert haben sich:

RETURN zu RETLW 0
RETFIE
SUBLW K
Werde den Verdacht nicht los, daß sich die gesamte Befehlszeile in
ihrem strukturellen Aufbau geändert hat
Vor 13 Jahren geschrieben:
BSF PORTB,0 ;jetzt Probleme
geändert in
MOVLW B´11111110´
MOVWF PORTB ; läuft

CMCON habe ich über EQU festgelegt und danach
RESET MOVLW B´00000111´
MOVWF CMCON
Habe meine asm Datei vor 13 Jahren ausgedruckt, sehe aber nichts von
diesem Befehl!

was bedeutet denn das x in MOVLW 0x07!

weiß auch nicht mehr was das F bedeutet in:
DECFSZ LOOP1,F ;inkrementieren des Inhalts von LOOP1
Wird der Inhalt von LOOP1 auf Hex F gesetzt, oder wie?
Sowas taucht auf meinen neuen asm nicht auf.

Oh weia, Fragen über Fragen

Grüße

Rolf

Space

RCLine User

Wohnort: Hasloh b. Hamburg

  • Nachricht senden

7

Montag, 16. Juni 2008, 16:32

Gibt es keine ausser für ASM keine anderer Entwicklungsumgebung für die PIC's ?
Gruß

Thomas

8

Montag, 16. Juni 2008, 16:52

Zitat

Original von ro.heg
Werde den Verdacht nicht los, daß sich die gesamte Befehlszeile in
ihrem strukturellen Aufbau geändert hat

ganz sicher nicht.

Zitat


Vor 13 Jahren geschrieben:
BSF PORTB,0 ;jetzt Probleme
geändert in
MOVLW B´11111110´
MOVWF PORTB ; läuft

Welche Art von Problemen?
Beim assemblieren? Welche Fehlermeldung?
Beim flashen oder beim Ausführen des Codes?
Damit dir geholfen werden kann, solltest du deine Probleme genau beschreiben.

Der Code macht auch nicht das gleiche:
bsf PORTB, 0 setzt B0 auf 1, der neue Code macht das Gegenteil.

Zitat


CMCON habe ich über EQU festgelegt

Auf welchen Wert? Hoffentlich 0x1F.
Besser ist es, p16f627.inc zu inkludieren. So hast du immer die richtigen prozessorspezifischen Adressen für alle Register.

Zitat


und danach
RESET MOVLW B´00000111´
MOVWF CMCON

sollte passen, wenn RESET ein label ist, das den Beginn des Programms kennzeichnet und der Programmzähler da auch vorbeikommt.

Einzelne Codeschnipsel ohne Kontext sind schwer zu beurteilen.

Zitat


Habe meine asm Datei vor 13 Jahren ausgedruckt, sehe aber nichts von
diesem Befehl!

auf die Gefahr, dass ich dich jetzt falsch verstehe: von diesem Befehl kannst du in dem alten Code auch nichts sehen, weil der alte PIC 16C71 gar kein CMCON Register hat.


Zitat


was bedeutet denn das x in MOVLW 0x07!

0x07 ist die 7 im Hex-Format (=B'00000111')

Zitat


weiß auch nicht mehr was das F bedeutet in:
DECFSZ LOOP1,F ;inkrementieren des Inhalts von LOOP1
Wird der Inhalt von LOOP1 auf Hex F gesetzt, oder wie?

Der Inhalt von LOOP1 wird *de*krementiert (Kommentar is falsch), das Ergebnis wird in LOOP1 gespeichert. Ist das Ergebnis = 0, wird die folgende Anweisung übersprungen.

Das Datenblatt ist dein Freund! Wenn du dein Programm zu laufen bringen willst, wirst du da wohl mal reinschauen müssen.

Grüße
Claus

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

9

Montag, 16. Juni 2008, 19:58

Hallo Claus,
vielen Dank für Deine Zitate und Kommentare!
Merke, daß ich hier ein Könner vor mir habe.
Morgen werde ich das verarbeiten und Dir berichten.

Viele Grüße und besten Dank

Rolf

Dieter59

RCLine User

Wohnort: Herlheim

  • Nachricht senden

10

Montag, 16. Juni 2008, 22:59

PIC C-Compiler

Hi,

Zitat

Original von Space
Gibt es keine ausser für ASM keine anderer Entwicklungsumgebung für die PIC's ?

Spontan fällt mir da "CC5X" ein. Das ist ein C-Compiler für PIC's, der in einer kostenfreien Version max. 1024 Instruktionen übersetzen kann.
Die kleinen 12F675 und dieser Compiler sind ideal zum experimentieren.

Auf dieser Seite (www.cc5x.de) ist ein kleiner Programmierkurs mit Beispielprogrammen zu finden.
Im Netz gibt es aber noch einige weitere Seiten mit Code-Schnipseln für diesen Compiler.

Viel Spaß
Dieter

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Dieter59« (16. Juni 2008, 23:00)


ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

11

Dienstag, 17. Juni 2008, 12:23

Hallo Leute,
ich werde versuchen nach besten Wissen die Zitate von Claus zu beantworten!

Zu 1. es war nur eine Vermutung, da ich Abläufe wie vor Jahren in meinen
neu gekauften asm Dateien nicht finde.

Zu 2. Der Assembler arbeitet fast ohne Fehler die Datei output.asm(1996erstellt)
ab (auch BSF PORTB,0) und trotzdem hängt sich das Programm im PIC
auf. Das kann aber auch an den Eingängen A0-A3 liegen, da wie Du schreibst,
der PIC16C17 gar kein CMCON Register besitzt.

Zu 3. CMCON EQU H`001F´

Zu 4. habe geschrieben ORG 0
GOTO RESET

RESET MOVLW B`00000111 ;spreche ich nur A0-A2 an?
MOVWF CMCON
Sollte ich lieber 00001111 angeben, um A3 auch zu digital.
Zu 5. ok, verstanden
Zu6. 0x07 vereinfacht ja sehr die Schreibweise

Zu 7. Sorry, natürlich dekrementieren. Aber wofür denn noch das,F!
Was geschieht denn, wenn ich das weglassen würde.
LOOP1 habe ich mit MOVLW 0x07 zu Beginn geladen.
Mir stehen 2 Bücher vom Franzis-Verlag zu Verfügung, ohne die ich garnicht
weiter kommen würde.
Im alten von 1996 sind die Befehle sehr schön beschrieben,
im neuen dagegen nur angedeutet echt was für Ing.

So, kleiner Erfolg ist schon da. Es leuchtet schon mal nach Zeit t1 eine LED

Viele Grüße
Rolf

12

Dienstag, 17. Juni 2008, 22:47

Hallo Rolf,

Zitat

Original von ro.heg
Zu 3. CMCON EQU H`001F´

wie Claus schon schrieb, solltest Du besser die entsprechende INC-Datei zu Deinem Prozessortyp einbinden.

Zitat


RESET MOVLW B`00000111 ;spreche ich nur A0-A2 an?
MOVWF CMCON
Sollte ich lieber 00001111 angeben, um A3 auch zu digital.

nein, die Bits 0/1/2 vom CMCON-Register reflektieren nicht die Betriebsart (Analog/Digital) für die entsprechenden Bits 0/1/2 von Port A, sondern wählen die Betriebsart der Analog-Komparatoren aus. Die genaue Funktion der Schaltung in der jeweiligen Betriebsart (0..7) ist in einer Tabelle im Datenblatt des Prozessors aufgeführt. In Betriebsart 7 (binär 111) sind die Komparatoren abgeschaltet und die Portleitungen RA0..RA3 sind dann allesamt digitale I/Os.
Ich kann mich Claus nur anschließen: Datenblatt lesen ist wichtig!

Zitat


Zu 7. Sorry, natürlich dekrementieren. Aber wofür denn noch das,F!

Bei den PICs kann man als Ziel einer Datenoperation i.d.R. entweder das "W"-Register wählen, oder man schreibt das Ergebnis stattdessen zurück in den Speicher bzw. das Register. Die Speicher/Register werden hier als "registerFile" bezeichnet, daher wohl das "F".
Also: wenn der Wert in "loop" z.B. gerade 5 ist:
bei "incf loop,W" steht danach in loop immer noch 5 und in W steht 6,
bei "incf loop,F" steht danach in loop 6 und W wird nicht verändert.

Zitat


Was geschieht denn, wenn ich das weglassen würde.

wird der Zielparameter weggelassen, wird als Defaultwert "F" genommen, d.h.
"incf loop" sollte wie erwartet funktionieren. Mich persönlich stören dann aber immer die Warnmeldungen des Assemblers, und sicherer ist es auch, wenn man das Ziel immer explizit angibt.

Zitat


Mir stehen 2 Bücher vom Franzis-Verlag zu Verfügung, ohne die ich garnicht
weiter kommen würde.
Im alten von 1996 sind die Befehle sehr schön beschrieben,
im neuen dagegen nur angedeutet echt was für Ing.

Die "Instruction Set" Beschreibung im Datenblatt ist eigentlich die "amtliche" Referenz. Die Franzis-Bücher kenne ich nicht.

Benutzt Du eigentlich nicht die MPLAB Entwicklungsumgebung von Microchip? Die finde ich fast unverzichtbar zur PIC-Programmentwicklung, besonders den MPLAB Simulator zum Debuggen...

Zitat


So, kleiner Erfolg ist schon da. Es leuchtet schon mal nach Zeit t1 eine LED

Prima! Kleine Erfolge sind wichtig, um den Spaß am Tüfteln nicht zu verlieren!

Grüße,

Thomas

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Ottili« (17. Juni 2008, 23:10)


ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

13

Mittwoch, 18. Juni 2008, 13:52

Hallo Thomas,
danke für Deine Hilfe, habe wieder vieles dazu gelernt!
Bei mir steht hier ein 10 Jahre alter Pentium mit parall./serieller
Schnittstelle (Windows 98)
Von Conrad habe ich mir ein Entwicklungs-kit der Fa. vellemann
zugelegt.
Enthalten ist ein Bord zum progamm. und austesten kleiner Programme.
1St. PIC16F627
Die beigefügte CD beinhaltet
5 St. Demo.asm
Assembler MPASMWIN.exe
Programmierer Progpic2.exe
diverse pdf Dateien über die PIC-Familie
Mit meinem englisch ist es nicht weit her, und hier liegt das Problem
wenn Ihr Profis schreibt "Datenblätter lesen"!
Das Kit funktionierte mit der ersten Demo.asm auf Anhieb
Wenn was nicht in meinen eigen erstellten Quelltexten funktioniert,
kann das süchtig machen.
Aber nun nochmal zu meiner eigentlichen Aufgabe.(siehe am Anfang)
Ich benötige 4 Eingänge für 4 verschiedene Zeiten(4 DIP-Schalter)
(ca. 30 Sec./5Minuten/10Minuten/20Minuten) danach soll z.B.PortB,0
im Rythmus von ca. 3Sec. EIN/3Sec.AUS ewig blinken.
Ich hatte mir bei Reichelt schon den 8pol. PIC12F675 ausgesucht,
aber ich glaube, ich bleibe bei dem 16F627; habe mich so an den gewöhnt,
und es funktioniert alles schon so gut.
Als Quarz wollte ich 4 MHz nehmen.
So, das wars erst mal.

Grüße

Rolf

14

Mittwoch, 18. Juni 2008, 18:06

Hi Rolf,

Zitat

Original von ro.heg
Hallo Thomas,
danke für Deine Hilfe, habe wieder vieles dazu gelernt!
Bei mir steht hier ein 10 Jahre alter Pentium mit parall./serieller
Schnittstelle (Windows 98)


soweit ich gerade die Doku über "System Requirements" der MPLAB-IDE überflogen habe, dürfte die auch noch unter Win98 laufen. Zwar werden neue Versionen nicht mehr von Microchip auf diesem System getestet, aber das muß nicht heißen, daß sie da nicht mehr laufen. Ich würde es auf jeden Fall versuchen, die MPLAB-IDE von Microchip zu installieren - es lohnt sich bestimmt und ist ja auch kostenlos!

Zitat


Von Conrad habe ich mir ein Entwicklungs-kit der Fa. vellemann
zugelegt.
Enthalten ist ein Bord zum progamm. und austesten kleiner Programme.
1St. PIC16F627
Die beigefügte CD beinhaltet
5 St. Demo.asm
Assembler MPASMWIN.exe
Programmierer Progpic2.exe
diverse pdf Dateien über die PIC-Familie

war bestimmt keine Fehlinvestition - das Experimentierboard kannst Du auch weiterhin verwenden und ein Programmiergerät hast Du damit auch. Zum Programmieren des Bausteins ist es ja egal, ob das Hex-File vom MPASMWIN.EXE oder aus der MPLAB-Umgebung heraus erzeugt wurde.

Zitat


Mit meinem englisch ist es nicht weit her, und hier liegt das Problem
wenn Ihr Profis schreibt "Datenblätter lesen"!

Naja, es sind ja zum Glück keine Shakespear-Dramen, die man da lesen muß... Und zugegeben: in die Falle mit den nicht funktionierenden Portleitungen wegen nicht deaktiviertem Komparator bin ich auch schon mal getappt...

Zitat


Ich hatte mir bei Reichelt schon den 8pol. PIC12F675 ausgesucht,
aber ich glaube, ich bleibe bei dem 16F627; habe mich so an den gewöhnt,
und es funktioniert alles schon so gut.

Den Prozessor je nach Anforderung (v.a. Anzahl der Portleitungen) zu wechseln, sollte kein Problem sein. Statt 12F675 kannst Du auch den 12F629 nehmen, wenn Du keinen A/D-Wandler brauchst.

Zitat


Als Quarz wollte ich 4 MHz nehmen.

Einen Quarz brauchst Du für die Anwendung nicht, außer, wenn Deine Timings die Präzision einer Quarzuhr haben sollen. Sonst reicht der interne 4MHz Oszillator des Prozessors.

Grüße,

Thomas

P.S.: Ich würde den Ortungspiepser nicht zeitgesteuert machen, sondern vom RC-Empfangssignal ansteuern, d.h. auf einem freien Servo-Kanal. Bei einem gewissen "Servo"-Ausschlag (gewollt oder Failsafe-Pos. vom Empfänger) piepst es. Fehlt der Impuls oder kommt Chaos an (Störungen), piepst es auch.

ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

15

Freitag, 20. Juni 2008, 13:40

Hallo Thomas,
Deine Idee, den Pieper nicht zeitgesteuert zu machen, hatte ich mir auch
schon überlegt.
Dazu kurz mal die Vorgeschichte, was mich bei meiner Zeitsteuerung
festhielt.
Vor ca. 10 Jahren brachte Conrad einen simplen Pieper auf dem Markt,
der aber nur für PPM-Empfänger tauglich war. Einfach mit nem C-MOS 4093
Ich kupferte das Ding ab, und hatte bei meinen Abstürzen in der Wildnis
vollen Erfolg. D.h. einfach Sender ausmachen, wenn ich ihn nicht fand,
waren es bestimmt Pilzsammler o.ä. Leute. Aber die Technik bleibt ja nicht
stehen, als die PCM-Empfänger auf dem Markt kamen. Und damit waren
diese Pieper nicht mehr brauchbar.
Auch heute gibt es keinen Pieper für PCM auf dem Markt
Ich nahm mir einen spcm16 scan35 (mittlerweile 6 Modelle damit ausgerüstet)
und sah mir das Signal der Kanäle auf dem Skop an.
Knüppel auf Stop Kanal1 Impulszeit ca. 1mS
" auf Fahrt " ca. 2mS /Pause 1mS
Sender auf AUS Impulszeit läuft zurück auf 1 mS und bleibt stabil
stehen (kein Fail Save).
Dies trifft für alle Kanäle zu.
Sowas über ein PIC auszuwerten übertrifft mein Wissen.
Zum Schluß noch ne Frage:
wie realisiere ich 10 oder sogar 20 Minuten?
so sieht es im Moment aus:

zeit1 LOOP1 ; Inhalt h´FF´
LOOP2 ; " FF
LOOP3 ; " FF
gehe1 DECFSZ LOOP1,F
GOTO gehe1
DECFSZ LOOP2,F
GOTO gehe1
DECFSZ LOOP3,F
GOTO gehe1
GOTO blinken ;PortB0 blinkt

Die Zeitmessung, bis zum blinken, ergab ca. 53 Sec. fast eine Minute.
Soll ich denn noch mehr LOOP `s reinsetzen, oder zum Schluß wieder
inkrementieren? Sonst klappt alles wunderbar.
Wollte ich den ext. Quarz weglassen, müßte ich den Pin hoch legen,
oder gar in der Luft hängen lassen?

Fragen über Fragen, aber es hat mich gepackt!

Viele Grüße auch an Claus, der mir sehr geholfen hat

Rolf

16

Freitag, 20. Juni 2008, 20:23

Hi Rolf,

bei der einfachen Schaltung vom Conrad ist klar, warum es mit modernen, digitalen Empfängern nicht durch Sender-Ausschalten geht (hat übrigens weniger mit PPP vs. PCM zu tun): Die Schaltung checkt ja blos, ob sich auf der Impulsleitung etwas tut oder nicht. Wenn der Empfänger keine Rauschsperre hat, wird die Schaltung nicht mal bei einem alten, analogen PPM-Empfänger piepsen, wenn der Sender ausgeschaltet wird.

Ok, die simple Zeitsteuerung ist natürlich einfacher zu programmieren und eine "Deluxe"-Version kannst Du später immer noch machen...

Die Zeitverzögerung über Programmschleifen geht natürlich, gibt aber Abzüge in der B-Note wegen schlechtem Stil ;)
Manchmal kann man aber auf den Stil pfeifen - es zählt schließlich, was am Ende 'rauskommt. Die "amtliche" Lösung wäre eine über Timerinterrupts gesteuerte Uhrenfunktion, dann könnte der Prozessor neben dem Warten auch noch andere Aufgaben ausführen. Aber bleiben wir der Einfachheit halber erst mal bei Warteschleifen.

Um auch noch einigermaßen übersichtlich lange Zeitverzögerungen zu erhalten, würde ich z.B. eine Warteschleife vorschlagen, die genau 1s läuft. In der äußeren Schleife wird dann ein 16-bit Zähler ("sekunden_high/sekunden_low") heruntergezählt, damit ist dann schonmal eine Verzögerung von bis zu 1092 Minuten möglich (65536 Sekunden).
Das Ganze dann als Unterprogramm "warten" geschrieben, kannst Du es von verschiedenen Stellen im Hauptprogramm aufrufen, z.B. für 10 Minuten = 600 Sekunden:

Quellcode

1
2
3
4
5
  movlw high 600
  movwf sekunden_high
  movlw low 600
  movwf sekunden_low
  call warten

Das Unterprogramm könnte dann so aussehen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
warten
  incf sekunden_low,F ;Korrektur weil "skip" bei decfsz eigenzlich bei 0xFF 
  incf sekunden_high,F ;passieren müßte, nicht bei 0

warten1
  decfsz sekunden_low,F 
  goto warten2 ;s.low noch nicht abgelaufen
  decfsz sekunden_high,F ;s.high herunterzählen
  goto warten2 ;noch nicht abgelaufen
  return ;gesamte Zeit abgelaufen -> zurück

warten2
  (irgenwelcher code, der 1s verzögert)
  goto warten1 ;nächste Sekunde

Zitat


Wollte ich den ext. Quarz weglassen, müßte ich den Pin hoch legen,
oder gar in der Luft hängen lassen?

Wenn der interne RC-Oszillator verwendet wird, können die entspechenden Pins als Portleitungen verwendet werden. Natürlich können die auch unbeschaltet bleiben.
Die Konfiguration des Oszillators (Quarz/intern/extern-RC usw.) muß im Config-Register des Controllers eingestellt werden. I.d.R. macht man das durch eine Zeile im Quelltext, z.B.:
__config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF

Hast Du mal probiert, ob das MPLAB auf Deinem Rechner läuft?

Grüße,

Thomas

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Ottili« (20. Juni 2008, 20:28)


ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

17

Samstag, 21. Juni 2008, 10:29

hui, das muß ich erst mal verarbeiten!
Habe alles ausgedruckt, und gehe damit zum alten Pentium.
Das MPLAB habe ich nicht getestet.
Im alten Buch gibt es eine Applikation, in dem man Pin16 (OSC1)
mit einem RC-Glied (R=5K6 / 100pF)belegen soll, dann schwingt die
f mit ca. 1MHz. Aber evtl. trifft das nur für den PIC16C71 zu.
Werde berichten, sobald ich weiter komme.
Ich dachte, ein Zähler hätte nur 8-bit, aber wie Du schreibst 16
Hätte ich denn in LOOP h`FFFF`eingeben können, anstatt nur FF

Erst mal vielen Dank für Deine Mühe

Grüße

Rolf

18

Samstag, 21. Juni 2008, 13:13

Hi Rolf,

Zitat

Original von ro.heg
Das MPLAB habe ich nicht getestet.

Warum nicht? Mach mal! ;)
Man tut sich echt leichter damit, als nach der "klassischen Methode":
1) Mit Texteditor ASM-File schreiben - der Editor kennt i.A. die Synthax vom PIC-Assembler nicht und gibt einem dementsprechend auch keine Hilfen!
2) durch den Assembler laufen lassen - meist kommen mehr oder weniger Fehlermeldungen, deren Ursache man dann mühsam im Quelltext lokalisieren muß.
3) Hex-File in den PIC brennen,
4) PIC in die Zielschaltung setzen und meist feststellen, daß es nicht läuft - ist halt blöd, daß man in den Prozessor nicht 'reingucken kann, um zu sehen, was im Programm falsch läuft...

Jetzt kommt die IDE: (Integrated Development Environment = Integrierte Entwicklungsumgebung):
Der dort vorhandene Editor zeigt schon bei der Eingabe anhand der Farbe, ob der Text ein Befehl, Label oder Kommentar usw. ist. Schreibe ich "movwl" sehe ich schon an der Farbe, daß das kein CPU-Befehl ist, sobald ich das Wort in "movlw" ändere, wird es blau.
Ein Tastendruck und das Projekt wird assembliert. Die Warnungen und Fehlermeldungen erscheinen in einem anderen Fenster. Bei Doppelklick auf die Meldung springt der Cursor im Quelltext gleich auf die entsprechende Zeile.

Nun kann man das Programm simulieren, um es zu debuggen. Dabei kann man sich Schritt für Schritt angucken, was im Prozessor passiert, also die Werte der Register und Speicherzellen nach jedem Befehl. Der aktuell simulierte Befehl wird im Quelltext markiert. Mit einem Klick auf eine Zeile im Quelltext und Auswahl "Run to cursor" läuft das Programm bis zu diesem Befehl und man kann prüfen, ob es bis dahin gemacht hat, was man wollte. Natürlich kann man auch virtuelle Eingangssignale an den simulierten Prozessor anlegen. Das war jetzt nur ein kleiner Teil der Möglichkeiten...

Zitat


Im alten Buch gibt es eine Applikation, in dem man Pin16 (OSC1)
mit einem RC-Glied (R=5K6 / 100pF)belegen soll, dann schwingt die
f mit ca. 1MHz. Aber evtl. trifft das nur für den PIC16C71 zu.

die meisten PICs haben ungefähr die gleichen Oszillator-Auswahlmöglichkeiten. Wie schon geschrieben, man muß das Config-Register entsprechend einstellen. Ich nehme fast immer den internen 4MHz Oszillator (symbolisch: _INTRC_OSC_NOCLKOUT), um ohne externe Bauteile auszukommen.

Zitat


Ich dachte, ein Zähler hätte nur 8-bit, aber wie Du schreibst 16
Hätte ich denn in LOOP h`FFFF`eingeben können, anstatt nur FF

Wenn Du willst, kannst Du auch einen 128 Bit breiten Zähler bauen - ist doch nur Software! Natürlich kannst Du nicht einfach den Wert 0xFFFF in eine 8 Bit Speicherzelle laden. Weil der Prozessor selbst nur 8-bit Daten kennt, sind die Sekunden hier in zwei 8 Bit breite Werte aufgeteilt (low/high).

Grüße,

Thomas

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Ottili« (21. Juni 2008, 13:33)


ro.heg

RCLine User

  • »ro.heg« ist der Autor dieses Themas

Wohnort: Quickborn

  • Nachricht senden

19

Dienstag, 24. Juni 2008, 13:17

Hallo Thomas,
voller Erfolg!!
Erstens habe ich auf Lochraster eine Test-Hardware erstellt.
Über 4 DIP-Schalter A0-A3 ansprechbar.
B0 verstärkt über NPN zum ansteuern des Pipers.
Taste "Test" zum sofortigen ansprechen des Piepers auf A0
Taste "Reset".
Einen Zeitmesser, den ich mal 1974 gebaut habe, flott gemacht.
Und dann ging es zur Sache, indem ich Dein Vorschlag über die Zeit
realisiert habe.
Nach CALL warten läuft es dann auf GOTO blinken.
Der Assembler zeigte Fehler 1 (hatte das END vergessen)
Der erste Test lief an, der Zeitmesser zeigte 985 Sekunden=16 Min./25 Sek.
Eingabe:
MOVLW high 600 /MOVLW low 600
Würde ich 300 eingeben, hätte ich dann 8 Minuten?
"high 600" ins w Register zu laden, ist für mich noch zu hoch!
Ich kannte immer nur binäre o. hex Werte.
Bald kommt noch die große Wahl und zwar den Pieper mit mind. 100 dB
zu finden. Nehme Kontakt zur Fa. digisound in Norderstedt auf. Die ich habe
liegen bei 85 dB.
Erst mal viele Grüße

Rolf

20

Dienstag, 24. Juni 2008, 17:39

Zitat

Original von ro.heg
Hallo Thomas,
voller Erfolg!!

Gratuliere! :)

Zitat


Der erste Test lief an, der Zeitmesser zeigte 985 Sekunden=16 Min./25 Sek.
Eingabe:
MOVLW high 600 /MOVLW low 600

Sorry,mein Fehler! Ich schreibe am Anfang in meinen ASM-Files immer "radix dec", damit der Assembler als Standard-Zahlenbasis das Dezimalsystem verwendet. Daran habe ich nicht gedacht. Vermutlich wurde Deine 600 dann als 600hex = 1536dec interpretiert, das müssten dann aber über 25 Minuten sein!? Läuft evtl. Deine 1 Sekunden-Schleife zu schnell ab?

Zitat


Würde ich 300 eingeben, hätte ich dann 8 Minuten?

ja - 300 ist die Hälfte von 600, also nur die halbe Zeit!

Zitat


"high 600" ins w Register zu laden, ist für mich noch zu hoch!

"high" und "low" sind Assembler-Operatoren,um auf das höherwertige oder niederwertige Byte eines 16-bit Wertes zuzugreifen. Natürlich kannst Du das auch mit dem Taschenrechner selbst ausrechnen und dann den jeweiligen 8-bit Wert in hexadezimaler, binärer oder auch oktaler Form hinschreiben, also z.B. statt "movlw high 600" dann "movlw 0x02" - kommt auf dasselbe heraus (600(dec) = 0258 (hex)).
Aber wenn einem der Assembler die Arbeit schon abnehmen kann...
Außerdem ist das Ganze durch die Verwendung der "echten" Zahl im Quelltext besser lesbar - wenn irgendwas (hier: Sekunden) den Wert 600 haben soll, dann sollte man die Zahl möglichst direkt auch im Quelltext sehen.

Grüße,

Thomas

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Ottili« (24. Juni 2008, 17:39)