Inhalt
 Parsic

Marken

Alle in dieser Beschreibung genannten Bezeichnungen von Erzeugnissen sind Marken der jeweiligen Firmen. Aus dem Fehlen der Markenzeichen ® bzw. TM kann nicht geschlossen werden, dass die Bezeichnung ein freier Markenname ist.

letzte Änderung: 30.09.2002

Einleitung

Die Objekte

Das erste Programm

Einstellungen Microcontroller

Einstellungen Parsic

Einstellungen Projekt

Simulation

Objekte erstellen

Objekte verschieben

Objekte löschen

Namen

Verbindungen

Pin`s belegen

RAM und ROM

Swen Gosch - Norderstraße 23 - 25335 Elmshorn - Tel.: +49(0)4121/22039

E-Mail: Swen.Gosch@t-online.de

Alle Rechte vorbehalten. Kein Teil dieser Software darf in irgendeiner Form (Diskette, CD-ROM oder ein anderes Medium) vervielfältigt oder verbreitet werden.

Der Verfasser haftet nicht für Schäden oder Störungen durch Einsatz der Software. Eine Haftung für eventuell auftretende Schäden oder Folgeschäden wird nicht übernommen.


 Die Objekte

Arithmetik

Bit-und Byte-Verteiler

Call

Datenquelle

EEProm

GND und VCC

Label

LCD - Modul Anschlusse definieren

LCD - Modul Texte oder Variable anzeigen

Limiter

Mono-Flop

Multiplexer

Oder-Gatter

One-Shot

RS-Flip-Flop

Schiebe-Register

Schmitt-Trigger

Sleep-Modus

Tabelle

Timer

Und-Gatter

UART (Serielle-Schnittstelle)

UART Daten

INCLUDE

Inverter

Impuls-Eingang

Impuls-Ausgang

Vergleichen

Verzögerung

Zähler

Zähler (Vor- und Rückwärts)


 Einleitung

PIC-Microcontroller eignen sich hervorragend dazu, auch komplexere Schaltungen auf ein Minimum zu beschränken. Wo früher noch eine ganze Euro-Karte benötigt wurde um eine umfangreichere Schaltung zu realisieren, da reicht heutzutage schon ein PIC-Microcontroller mit ein paar Peripherie Bauteilen.

Aber so ein Microcontroller will auch programmiert werden und das bedeutet, man muss erst einmal ein paar Hürden bewältigen die da wären:

1.	Datenblätter wälzen.

2.	eventuell mit der Sprache C befassen.

3.	ASSEMBLER-Befehle lernen.

Jemand der sich mit solchen "Kleinigkeiten" noch nie befassen musste, gibt spätestens bei der Assembler Programmierung auf. Um dem "normalen" Elektroniker den Einstieg zu erleichtern, wurde Parsic entwickelt.

Soll auch mal etwas ausgefalleneres programmiert werden, stellt Parsic auch eine Funktion zur Verfügung, um INCLUDE-Dateien einzubinden.

Für die Programmierung mit Parsic brauchen Sie keine Erfahrung in der Programmierung von PIC's, aber Grundkenntnisse in der digitalen Elektronik sollten vorhanden sein.

Was Sie unter Parsic wissen müssen ist:

welchen Microcontroller möchte ich einsetzen

die Taktfrequenz

den Oszillatortyp (RC, XT, HS, LP)


Aller Anfang ist leicht
 Das erste Programm

Hinweis:	Wenn Sie über Datei > Build ein Projekt übersetzen lassen, legt Parsic automatisch eine Projekt-Datei für MPLAB an (PROJEKTNAME.PJT). Sie müssen diese Datei nur noch über "Project > Open" öffnen.

Hier nun in Kurzform, wie der Funktionsplan von Parsic in den Microcontroller kommt.

Ich gehe davon aus, dass Sie das Entwicklungssystem Picstart Plus erworben haben. Dem Paket liegt ein PIC16F84-04 bei. Dieser Microcontroller hat zwar keine A/D-Wandler, dafür aber den Vorteil, dass man kein UV-Löschgerät benötigt. Der PIC16F84 kann mindestens 1000 mal programmiert werden - genügend Spielraum für Experimente.

Der Ablauf beim Programmieren ist folgender:

1.	Quelltext mit Parsic erstellen oder

2.	Quelltext schreiben bzw. korrigieren ( *.ASM)

3.	Mit MPASM oder MPASMWIN übersetzen (*.HEX)

4.	Programm brennen (dauert nur einige Sekunden)

5.	Testen

Wenn Sie MPLAB von MICROCHIP noch nicht installiert haben, dann holen Sie es jetzt nach.

Kopieren Sie Parsic in das Verzeichnis von MPLAB (C:\MPLAB)

Starten Sie Parsic und laden EXAMPLE1.PIC.

Unter > Datei > Quelltext speichern unter... speichern Sie jetzt den Quelltext unter dem Namen EXAMPLE1.ASM.

Sie können auch Build benutzen. Hier wird der Quelltext gespeichert und danach gleich von MPASM übersetzt.

Starten Sie MPLAB.

MPLAB™ Version 5.00 oder höher.

Variante 1

1.	Legen Sie unter Project -> New Project eine neue Projekt-Datei an mit dem Namen EXAMPLE1.PRJ

2.	Klicken Sie auf Development mode -> change.

3.	Stellen Sie den Microcontroller auf 16C84 bzw. 16F84 und MPLAB-SIM Simulator.

4.	Klicken Sie im Abschnitt > Project files < auf example1 [.hex]

5.	Klicken Sie auf Node Properties.

6.	Wählen Sie im Dialog folgende Einstellungen:

7.	Klicken Sie auf Add Node

8.	Wählen Sie die von Parsic gespeicherte ASM-Datei aus.

9.	Schließen Sie den Dialog.

10.	Drücken Sie F10 oder Project -> Make Project.

Hinweis:	Wenn Sie eine INCLUDE-Datei benutzen und sie verändert haben, müssen Sie die Übersetzung durch STRG-F10 oder Project -> Build... erzwingen.

Klicken Sie auf PICSTART-Plus -> Enable Programmer.

Wählen Sie den PIC16C84 bzw. PIC16F84 aus.

Klicken Sie auf Program.

Da Sie den MPLAB-Sim Simulator ausgewählt haben, können Sie jetzt durch drücken von F8 oder F7 im Einzelschritt durch das Programm gehen.

Nützliche Fenster:

 	Window -> Special Function Registers

Window -> Stopwatch...

Window -> New Watch Window (zum Anzeigen und verfolgen benutzter Variablen)

Variante 2

1.	Drücken Sie unter Parsic -> F10 (Build)

2.	Starten Sie MPLAB.

3.	Klicken Sie auf PICSTART-Plus -> Enable Programmer.

4.	Wählen Sie den PIC16C84 bzw. PIC16F84 aus.

5.	Klicken Sie im Hauptmenü auf File -> Dowload to Memory.

6.	Wählen Sie die durch MPASM(WIN) erzeugte EXAMPLE1.HEX-Datei aus.

7.	Klicken Sie im PICSTART-PLUS Dialog auf Program.

Die wichtigsten Einstellungen von MPLAB finden Sie unter dem Menütitel -> Options.

Die Funktionen von MPLAB sind sehr umfangreich und können an dieser Stelle nicht alle beschrieben werden. Probieren Sie einfach mit der Entwicklungsumgebung ein wenig herum, bevor Sie sich mit umfangreicheren Projekten befassen.


 Namen

siehe auch Pin's belegen

Parsic vergibt normalerweise automatisch die Namen für Objekte und nummeriert sie durch. Unter besonderen Umständen kann es aber erforderlich sein einen festen Bezeichner zu vergeben.

Klicken Sie mit der rechten Maustaste unten links in das Objekt. In dem darauf hin erscheinenden Dialog ändern Sie den Namen so, dass er sich in den ersten beiden Zeichen unterscheidet. Der Name darf max. 30 Zeichen lang sein. Das erste Zeichen muss immer ein Buchstabe sein.

Beispiel:

Das UND-Gatter hat den Namen UG12.

Ändern Sie den Namen in U1.

Jetzt wird der Name von Parsic nicht mehr geändert.

Besondere Namen unter Parsic:

S...	wird benutzt für Signale.

Rx, GPx	wird benutzt zur Zuordnung der Ein- und Ausgänge des PIC's

ADCx	bezeichnet einen Analog-Eingang

Diese Namen sind Befehle des Microchip-Assemblers.

Parsic akzeptiert die Eingabe dieser Namen, der Assembler wird aber eine Fehlermeldung ausgeben.

ADDLW	SUBLW	MOVWF

ADDLW	SUBLW	MOVWF

ANDLW	XORLW	NOP

CALL	ADDWF	RLF

CLRWDT	ANDWF	RRF

GOTO	CLRF	SUBWF

IORLW	CLRW	SWAPF

MOVLW	COMF	XORWF

OPTION	DECF	BCF

RETFIE	DECFSZ	BSF

RETLW	INCF	BTFSC

RETURN	INCFSZ	BTFSS

SLEEP	IORWF

TRIS	MOVF

Eine genauere Beschreibung der Assembler-Befehle finden Sie z.B. im Quick-Reference-Guide von MPASM von Microchip.


 Objekte erstellen

Klicken Sie mit der linken Maustaste auf ein beliebiges Symbol unter der Menüleiste und halten die Taste fest. Ziehen Sie die Maus in das Bearbeitungsfenster und lassen Sie die Maustaste los.


 Objekte verschieben

Einzelne Objekte verschieben

Bewegen Sie die Maus über das Objekt, bis der Mauspfeil sich in dieses [image] Symbol ändert. Greifen Sie mit der linken Maustaste das Objekt verschieben Sie es.

Hinweis:	Zum verschieben von Verbindungspunkten, drücken Sie zusätzlich die <Strg> bzw. <Ctrl> Taste.

Mehrere Objekte gleichzeitig verschieben

Variante 1

Drücken und halten Sie die Shift-Taste fest.

Selektieren Sie mit der linken Maustaste die Objekte, die Sie verschieben wollen.

Die selektierten Objekte verändern ihre Umrissfarbe in rot.

Lassen Sie die Shift-Taste los

Variante 2

 	Drücken und halten Sie die Shift-Taste fest.

 	Klicken Sie mit der linken Maustaste in einen freien Bereich und halten sie fest.

 	Ziehen Sie einen Rechteck um die Objekte die Sie selektieren wollen.

 	Lassen Sie die Maustaste los.

 	Lassen Sie die Shift-Taste los.

Beide Varianten können auch gemischt werden.

Verschieben Sie jetzt mit der linken Maustaste Taste das Objekt, das für Sie maßgebend ist.

Achten Sie darauf, das andere Objekte nicht die äußersten Fensterbereiche verlassen.

Selektierung aufheben

Klicken Sie mit der linken Maustaste in einen freien Bereich.


 Objekte löschen

Einzelne Objekte löschen

Shift drücken und halten.

Klicken Sie mit der linken Maustaste auf das zu löschende Objekt.

Lassen Sie die Shift-Taste los

Drücken Sie die > Entf < Taste.

Mehrere Objekte löschen

Shift drücken und halten.

Klicken Sie mit der linken Maustaste in einen freien Bereich und halten sie fest.

Ziehen Sie einen Rechteck um die Objekte die Sie selektieren wollen.

Lassen Sie die Maus-Taste los.

Lassen Sie die Shift-Taste los.

Drücken Sie die Entf (Del) Taste.


Verbindungen
 Verbindungen zwischen Objekten

Hinweis:	Verbindungen beginnen immer an einen Objekt-Eingang oder Objekt-Ausgang. Der Kern von Verbindungen sind die Knotenpunkte.

Es sind nur folgende Verbindungen möglich:

1.	Ausgang -> Knotenpunkt

2.	Knotenpunkt -> Knotenpunkt

3.	Eingang -> Knotenpunkt

Verbindung herstellen

Klicken Sie mit der linken Maustaste auf ein Objekt-Anschluss und halten die Taste fest. Es erscheint eine blaue Linie die Sie mit der Maus beliebig verschieben können.

Parsic beginnt immer mit einer waagerechten Linie. Sie können aber mit Hilfe der Shift-Taste (Umschalt) zwischen waagerecht und senkrecht umschalten.

Signale

Jeder Verbindung wird von Parsic automatisch einen Signalname zugewiesen.

Sollte es erforderlich sein, einer Verbindung einen festen Signal-Namen zu geben, klicken Sie mit der rechten Maustaste auf einen beliebigen Knotenpunkt der Verbindung.

Im darauf hin erscheinenden Dialog geben Sie einen Signal-Namen ein der nicht mit einem >S< beginnt.

Beispiel:

für Bit-orientierte Verbindungen: -> S0.3

für Byte-orientierte Verbindungen: -> S7

Rückgängig machen von festen Signal-Namen

für Bit-orientierte Verbindungen:

geben für den Signal-Namen einen Punkt -> . <- ein.

für Byte-orientierte Verbindungen:

löschen Sie den Signal-Namen oder geben Sie nur ein ->S<- ein.


PIC auswählen
 Einstellungen

Wählen Sie aus dem Menü Einstellungen > Microcontroller

Aktivieren Sie den Prozessortyp den Sie verwenden wollen.

Wählen Sie den Oszillator:

RC(ext.)	=	Die Taktfrequenz wird durch eine RC-Kombination bestimmt

LP	=	Low-Power, für Quarze oder Keramikschwinger von 0 bis 200 kHz

XT	=	für Quarze oder Keramikschwinger von 200 kHz bis 4 MHz

HS	=	High-Speed, für Quarze oder Keramikschwinger 4 bis 20 MHz

RC(int.)	=	Interner RC-Oszillator, nicht bei allen Microcontrollern verfügbar.

Taktfrequenz

Tragen Sie hier den Wert in Hz ein, mit dem der Oszillator schwingt.

Watch-Dog-Timer

Aktiviert, wird Parsic automatisch Befehle einfügen, die den WDT regelmäßig zurücksetzen. Bleibt das Programm "hängen", wird nach ca. 18 ms ein Reset ausgelöst.

Power-On-Timer

Aktiviert, wird nach einem Reset zusätzliche 72 ms gewartet, bis der Microcontroller mit der Programmausführung beginnt.

Port-B pull up Enable:

Aktiviert, werden intern an jedem Pin von RB0...RB7, der als Eingang konfiguriert ist, "Widerstände" gegen Vdd gelegt (+).

Brown-Out-Detect:

Aktiviert, Reset bis die Versorgungsspannung > 4 V. Nützlich für langsam ansteigende Versorgungsspannung, um einen sicheren Anlauf zu gewährleisten.

Nachteil: zusätzlicher Stromverbrauch von max. 500 µA.

MCLR

MCLR = MCLR	- normaler Reset-Eingang

MCLR = Input, MCLR int. tied to VDD	-dem MCLR-Pin wird ein Eingang zugewiesen (z.B. GP3). MCLR wird intern mit VDD verbunden (+).

Optimieren (nur PIC's mit mehreren RAM-Bank's)

Aktiviert, fügt Parsic nur an den Stellen Befehle zur Speicherbankumschaltung ein, wo es unbedingt erforderlich ist. Ansonsten vor jedem Zugriff auf eine Variable.

MPLAB-ICD

Aktiviert, werden folgende RAM- und ROM-Bereiche für den MPLAB Incircuit-Debugger freigehalten (PIC16F87x).

1.	An Adresse 0 steht ein NOP Befehl.

2.	Die RAM-Adressen $70 und $1EB - 1EF werden von Parsic nicht benutzt.

3.	Die letzten 256 Words im ROM werden nicht belegt.

Callibration value

Dieser Eintrag ist wichtig bei PIC's mit internen RC-Oszillator und Löschfenster (JW-Typen).

Der Wert der hier eingetragen werden muss, wird von Microchip bei der Herstellung des PIC's ermittelt. Nach einem Reset wird dieser Wert in das OSCCAL Register geschrieben und sorgt dafür, dass der interne Oszillator möglichst genau mit 4 MHz schwingt. Höhere Werte ergeben eine höhere Taktfrequenz.

Hinweis:	Diesen Wert muss man vor dem ersten programmieren aus dem PIC auslesen. Er befindet sich immer am Ende des ROM's in Form eines Befehls. Nach dem löschen des PIC's ist dieser Wert sonst unwiderruflich verloren.

Beispiel PIC12CE519:

An der Adresse $3FF steht der Befehl MOVLW H'84'

Die "84" muss man sich notieren und bei Callibration value eintragen.

Code-Protected:

Aktiviert, kann der PIC nach dem Programmieren nicht mehr ausgelesen werde

Achtung

Bei löschbaren PIC-Typen (JW) mit Fenster, kann auch durch UV-Bestrahlung dieses Bit nicht wieder zurückgesetzt werden. Das Programm wird zwar gelöscht, der PIC kann aber nicht wieder neu programmiert werden.


 Datenquelle

siehe auch Namen

Die Datenquelle erfüllt mehrere Aufgaben:

1.	Bereitstellung von Variablen für eigene Programmteile, die über das Include-Objekt eingebunden werden.

2.	Zuordnung der Analog/Digital-Wandler bei PIC's mit A/D.

Durch anklicken mit der rechten Maustaste können Sie einen beliebigen Wert oder Namen eingeben.

8-Bit:

Wertebereich für Konstanten 0...255.

16-Bit:

Wertebereich für Konstanten 0...65535.

Hinweise:

1.	Signalnamen dürfen nicht mit einem ‘S’ beginnen.

2.	Verbindungen, die Sie an der Datenquelle anschließen, erhalten als Signalname immer den Wert, den Sie der Datenquelle gegeben haben.

3.	Bei 16-Bit wird immer eine zweite Variable mit der Endung "_HI" angelegt.


 Der Multiplexer

Funktion n zu 1

Der Multiplexer hat bei dieser Funktion 2...8 Eingänge. Die Eingänge, Select und der Ausgang sind 8-Bit breit (Byte). Die Eingänge dürfen auch Konstante sein ( 0...255).

Select-Eingang	Out-Ausgang erscheint

0	IN0

1	IN1

2	IN2

usw.

Ist der Wert am Select größer als die Anzahl der Eingänge, wird er ignoriert.

Funktion 1 zu n

Der Multiplexer hat bei dieser Funktion 2...8 Ausgänge. Die Ausgänge, Select und der Eingang sind 8-Bit breit (Byte).

Select-Eingang	Der IN-Eingang erscheint am Ausgang

0	OUT0

1	OUT1

2	OUT2

usw.

Ist der Wert am Select größer als die Anzahl der Ausgänge, wird er ignoriert.

Name

Der Name des Multiplexeres muss eindeutig sein. (max. 30 Zeichen) und wird von Parsic automatisch vergeben.


Pin's belegen
 Pin's belegen, oder die Verbindung zur Außenwelt

siehe auch Namen

In den Datenblättern von Microchip werden die Anschlußpins mit RA0, RA1, RA3, RB7, RC6 usw. bezeichnet. Wenn man etwas weiter herumstöbert tauchen aber auch die Bezeichnungen PORTA, PORTB usw. auf. Parsic nutzt grundsätzlich die Bezeichnung RX.X bzw. GP.X.

Um jetzt z.B. den Pin RB3 mit dem Ausgang eines UND-Gatter's zu verbinden, klicken Sie mit der rechten Maustaste auf den Ausgang des UND-Gatter's und geben Sie im darauf erscheinenden Dialog unter Belegt: einfach den Namen RB.3 ein.

Wie auch bei den Signalen, können Sie die Funktion des Ausgangs bzw. Eingangs, durch anklicken auf den Invertiert-Button umkehren.

Da Sie jetzt RB3 auf einen Ausgang eines Objektes gesetzt haben, wird Parsic bei der Initialisierung des PIC's RB3 auch als Ausgang programmieren.

Wichtig

Einmal Ausgang, immer Ausgang.

Nicht benutzte Pin's werden als Eingang initialisiert.

Besonderheiten:

RA4	als Ausgang programmiert, ist er vom Typ Open-Collector.(evtl. Pull-Up Widerstand erforderlich)

RB0...7	als Eingang programmiert, können intern Pull-Up-Widerstände programmiert werden.

RB0,4...7	können einen Interrupt auslösen

Und die Analog-Eingänge ?

Greifen Sie sich eine Datenquelle, und platzieren sie im Arbeitsfenster. Klicken Sie mit der rechten Maustaste auf die Datenquelle und geben als Wert z.B. ADC0 ein. Sie können jetzt vom Ausgang der Datenquelle Verbindungen zum Schmitt-Trigger oder anderen Objekten mit 8-Bit Eingängen ziehen.

Die Zuordnung der A/D Kanäle unter Parsic ist folgende:

PIN	A/D-Kanal

RA0	ADC0

RA1	ADC1

RA2	ADC2

RA3	ADC3


 RAM und ROM

ROM

Read Only Memory

Nur Lesespeicher. In diesem Speicherbereich wird das eigentliche Programm abgelegt.

Jeder Befehl belegt 1 Wort und ist 14 Bit breit (PIC16CXX).

RAM

Random Access Memory

Wahlfreier Speicherzugriff.

Wird in den Datenblättern auch als Register File bezeichnet.

In diesem Speicher werden, während des Programmablaufs, Signale und Variable zwischengespeichert.

Der PIC16C71 bzw. PIC16C84 besitzt 48 Byte RAM.

Die Bytes 0...11 sind Spezial-Register.

Die Bytes 12...47 stehen für Signale und Variable zur Verfügung. (36 Byte)

Hinweis:

Parsic zeigt unterhalb der Menüleiste ständig die Werte für das zur Zeit benötigte RAM an. Unter besonderen Umständen können die Werte für das ROM von den wirklich verbrauchten Worten ein wenig abweichen.


 Inverter

siehe UND-Gatter


 Und-Gatter

siehe auch Oder-Gatter

Das UND-Gatter hat bis zu 16 Eingänge. Alle Eingänge und der Ausgang können invertiert werden. Bei nur einem Eingang wird der Ausgang automatisch invertiert => Inverter.

Name

Der Name des Gatters muss eindeutig sein. (max. 30 Zeichen) und wird von Parsic automatisch vergeben.


 Oder-Gatter

siehe auch Und-Gatter

Das ODER-Gatter hat bis zu 16 Eingänge. Alle Eingänge und der Ausgang können invertiert werden. Bei nur einem einem Eingang wird der Ausgang automatisch invertiert => Inverter.

Name

Der Name des Gatters muss eindeutig sein. (max. 30 Zeichen) und wird von Parsic automatisch vergeben.


 Timer

siehe auch Mono-Flop

Der Timer gibt eine bestimmte Frequenz an seinem Ausgang aus. Über die rechte Maustaste kann der Name und die Periodendauer geändert werden. Bei ungültigen Eingaben der Periodendauer wird eine Fehlermeldung ausgegeben.

Name

Der Name des Zeitgebers muss eindeutig sein. (max. 30 Zeichen) und wird von Parsic automatisch vergeben.

Hinweis

Wenn für die Periodendauer eine 8-Bit Variable angeben wird, dann berechnet sich die Periodendauer folgendermaßen:

(Wert der Variablen (0...255) x 2 x 256) + Programmdurchlaufzeit des gesamten Programms.

Beispiel:

Sie haben die Variable ZV1 eingetragen. Sie bezeichnet einen Zähler (ZV1).

Dieser Zähler hat zur Zeit den Wert 16.

Dann hat der Timer z.Z. eine Periodendauer von:

16 x 2 x 256 = 8192 Takte = 8192 µS bei 4 MHz + Programmdurchlaufzeit.

Wenn für die Periodendauer eine 16-Bit Variable angeben wird, dann berechnet Sich die Periodendauer folgendermaßen:

(Wert der Variablen [0...65535) x 2 x 256) + Programmdurchlaufzeit des gesamten Programms.


 RS-Flip-Flop

Bedingung für Setzen

S=High

R=Low

Bedingung für Rücksetzen

R=High

S=High oder Low

Hinweis:	Invertierte Ein- oder Ausgänge kehren die Funktion um.

Name

Der Name des RS-Flip-Flop muss eindeutig sein. (max. 30 Zeichen) und wird von Parsic automatisch vergeben.


Mono-Flop
 Mono-Flop oder Verzögerung

siehe auch Timer

Mono-Flop

Das Mono-Flop wird, je nach Eingangsbeschaltung, durch eine positive oder negative Flanke getriggert.

Durch anklicken mit der rechten Maustaste, erscheint der Dialog zum Eingeben der:

Impulsdauer in Millisekunden oder durch Angabe einer Variable

Retriggerbar oder nicht

Der Name

Mono-Flop oder Verzögerung

Hinweis:	Invertierte Ein- oder Ausgänge kehren die Funktion um.

Anzug-Verzögerung

In dem Moment, wo der Eingang auf High gesetzt wird, beginnt die voreingestellte Zeit zu laufen. Nach Ablauf der Zeit, geht der Ausgang auf High.

Geht der Eingang vor Ablauf der Zeit auf Low, wird die Zeit zurückgesetzt.

Abfall-Verzögerung

In dem Moment, wo der Eingang auf High gesetzt wird, wird auch der Ausgang auf High gesetzt. Geht der Eingang auf Low, beginnt die voreingestellte Zeit zu laufen. Nach Ablauf der Zeit, geht der Ausgang auf Low.

Geht der Eingang vor Ablauf der Zeit auf High, wird die Zeit zurückgesetzt.

Name

Der Name des Mono-Flop muss eindeutig sein. (max. 30 Zeichen) und wird von Parsic automatisch vergeben.

Hinweise

Wenn Sie für die Impulsdauer eine Variable angeben, dann berechnet sich die Impulsdauer folgendermaßen:

(Wert der Variablen (0...255) x 256) + Programmdurchlaufzeit des gesamten Programms.

Beispiel

Sie haben die Variable ZV1 eingetragen. Sie bezeichnet einen Zähler (ZV1).

Dieser Zähler hat zur Zeit den Wert 16.

Dann hat das Mono-Flop z.Z. eine Impulsdauer von:

16 x 256 = 4096 Takte = 4096 µS bei 4 MHz + Programmdurchlaufzeit.


 Zähler

siehe auch Vor- und Rückwärtszähler

Der Zähler ist eine 1 Byte Variable und kann somit von 0...255 zählen. Die Ausgänge (max. 8), können auf unterschiedliche Bits verteilt werden.

Es wird nur Quelltext für die Ausgänge erzeugt, die einen Signal-Namen besitzen.

Alle Ein- und Ausgänge können invertiert werden.

Der Reset-Eingang hat Vorrang.

Name

Der Name des Zählers muss eindeutig sein (max. 30 Zeichen) und wird von Parsic automatisch vergeben.


VR-Zähler
 Vorwärts- und Rückwärts-Zähler

siehe auch Zähler

Der Zähler ist eine 1 Byte oder 2 Byte Variable und kann somit von 0...255 bzw. 0...65535 zählen. Die Ausgänge (max.16), können auf unterschiedliche Bits verteilt werden.

Der QS-Ausgang ist der Sammelausgang und kann direkt mit einem anderen Objekt mit 8- oder 16-Bit Eingang verbunden werden.

Zählrichtung

hat R/V Low-Pegel, wird vorwärts gezählt.

liegt ein High-Pegel an, wird rückwärts gezählt.

Name

Der Name des Zählers muss eindeutig sein (max. 30 Zeichen) und wird von Parsic automatisch vergeben.

Hinweise:	Es wird nur Quelltext für die Ausgänge erzeugt, die einen Signal-Namen besitzen.

Alle Ein- und Ausgänge ( außer QS ) können invertiert werden.

Der Reset-Eingang hat Vorrang.


 Schiebe-Register

Jedes Schiebe-Register ist eine 1 Byte große Variable. Bei jedem positiven bzw. negativen Impuls am CLK-Eingang werden die Daten beginnend bei Bit 0 in das Schieberegister übernommen.

Die Ausgänge (max. 8), können auf unterschiedliche Bits verteilt werden. Es wird nur Quelltext für die Ausgänge erzeugt, die einen Signal-Namen besitzen.

Alle Ein- oder Ausgänge können invertiert werden.

Der Reset-Eingang hat Vorrang.

Name

Der Name des Zählers muss eindeutig sein. (max. 30 Zeichen) und wird von Parsic automatisch vergeben.


 Schmitt-Trigger

Die Eingänge arbeiten je nach Einstellung mit 8-Bit oder 16-Bit Auflösung.

Für den SP und HY Eingang gilt:

Die Werte dürfen konstant oder variabel sein

Der IN Eingang muss variabel sein.

Die Funktion des Ausganges kann auch invertiert werden.

Funktion:

Auf den IN Eingang wird das zu messende Signal gegeben.

Der SP Eingang legt den oberen Schaltpunkt fest.

Der HY Eingang bestimmt die Hysterese.

Der untere Schaltpunkt berechnet sich aus SP - HY Eingang.

Beispiel

SP = 100

HY = 20

Der Ausgang geht bei Werten >= 100 auf High und bei Werten < (100 - 20) auf Low.

Die Hysterese darf niemals größer sein als der Schaltpunkt.

Name

Der Name des Schmitt-Trigger muss eindeutig sein. (max. 30 Zeichen) und wird von Parsic automatisch vergeben.


 Tabelle

Die Tabelle dient dazu, feste Werte im ROM abzulegen.

Der Zugriff auf die Tabelle erfolgt normalerweise über das CALL-Objekt.

Die Tabelle wird als Unterprogramm im ROM angelegt.

Typ

8-Bit	Es werden Werte im Bereich 0...255 in der Tabelle abgelegt.

Die Länge der Tabelle darf zwischen 1 und 256 liegen

16-Bit	Es werden Werte im Bereich 0...65535 in der Tabelle abgelegt.

Die Länge der Tabelle darf zwischen 1 und 128 liegen.

Der Wert wird in der Reihenfolge Low-Byte, High-Byte in der Tabelle abgelegt.

Tabelle bearbeiten

1.	Klicken Sie mit der rechten Maustaste in das Tabellen-Objekt.

2.	Geben Sie der Tabelle einen eindeutigen Namen.

3.	Legen Sie die Länge fest.

4.	Geben Sie die Werte ein. Über den rechten Rollbalken erreichen Sie die restlichen Werte. Die Zählung beginnt immer bei 0

Beim eingeben der Werte, können Sie zwischen verschiedenen Formaten wählen, unabhängig von dem was Sie unter <Anzeige> gewählt haben.

Dezimal	alle Ziffern zwischen 0...9 sind erlaubt.

Hex	mit vorangestelltem $ sind die Zeichen 0...9 und A...F erlaubt.

Binär	mit vorangestelltem % sind die Ziffern 0 und 1 erlaubt. Führende Nullen können weggelassen werden.

ASC	mit vorangestelltem ' ist ein beliebiges ASC Zeichen erlaubt

Speichern

Der Inhalt der Tabelle wird im ASC-Format gespeichert. Pro Zeile wird ein Wert geschrieben.

Laden

Der Inhalt der Tabelle wird aus einer ASC-Datei gelesen. In jeder Zeile muss ein Wert stehen. Leerzeilen werden ignoriert. Steht der Typ auf 8-Bit, so werden höhere Werte auf 8-Bit abgeschnitten.

Anwendungsbeispiele

7-Segment-Decoder

Linearisierung von analogen Werten


Call
 Call oder Unterprogramme

Das Call-Objekt dient dazu, Unterprogramme und Tabellen aufzurufen.

Tabellen

Der Inhalt der Variablen am IN-Eingang ist der Index auf den Eintrag in der Tabelle.

Beispiel

Die Tabelle die aufgerufen werden soll, hat eine Länge von 16. Der Inhalt der Variablen am IN-Eingang muss dann zwischen 0 und 15 liegen. Ist der Wert höher, so kann es sein, dass der PIC einen Reset durchführt.

Typ

8-Bit	Der Ausgang ist eine 8-Bit Variable.

16-Bit	Der Ausgang ist eine 16-Bit Variable. Dieser Typ muss beim Zugriff auf 16-Bit Tabellen verwendet werden.


 INCLUDE

INCLUDE-Dateien sind dafür gedacht, Unterprogramme oder Assembler-Sequenzen in Parsic einzubinden. Sie können über die rechte Maustaste auswählen an welcher Stelle im erzeugten Quelltext die INCLUDE-Datei eingebunden wird.

Es gibt 5 Positionen an denen INCLUDE-Dateien mit eingebunden werden können.

1.	zu Beginn der Initialisierung

2.	am Ende der Initialisierung

3.	im Hauptprogramm

4.	in der Interruptroutine

5.	Unterprogramm

Achtung:

Beim Einbinden in der Interruptroutine muss mindestens ein Objekt mit Zeiten vorhanden sein, ansonsten wird die INCLUDE-Datei ignoriert.

Beispiel für Unterprogramme

Das Programm wird als Unterprogramm eingebunden.

;******************************

Unterprg1	clrf tmp1

verz1	decfsz tmp1,f	; -1 bis tmp1 den wert 0 erreicht

goto verz1

return	; Rücksprung

;******************************

Unterprg2	swapf adc0,w	; wert vom Analog Kanal 0

andlw H'0F'	; durch 16 teilen und in tmp1 speichern

movwf tmp1

return	; Rücksprung

;******************************

Beispiel für Assembler-Sequenz

Das Programm wird im Hauptprogramm eingebunden.

btfss ra,4	; ist porta Bit-4 auf high ?

goto seq_ende	; Nein

call unterprg2	; Ja, -> Unterprogramm 2 aufrufen

movwf   rb	; und auf portb ausgeben

seq_ende


Impulse messen
 Impuls - Eingang

Mit dem Impuls-Eingang wird die Länge eines externen Impulses, mit einer Auflösung von 16-Bit, bestimmt.

Parsic benutzt dazu den PORTB change Interrupt (RB4...7).

Die Genauigkeit hängt von mehreren Faktoren ab.

1.	Der Taktfrequenz

2.	Anzahl der verwendeten Timer und Mono-Flops.

(viele Timer oder Mono-Flops verringern die Genauigkeit)

Die Zeit wird mit Hilfe der Internen Taktfrequenz bestimmt. Bei einem 4 MHz Quarz entspricht dieses einer Auflösung von 1 Mikrosekunde (20 MHz -> 200 Nanosekunden).

Die Länge des zu messenden Impulses muss zwischen 50 und 65500 Takten liegen.

Die Zeitmessung beginnt mit der positiven Flanke und wird nach der negativen Flanke in einer Variable mit dem Namen RBxTIME und RBxTIME_HI gespeichert.

Im Info-Dialog können Sie einstellen, ob der Start der Messung bei einer positiven oder negativen Flanke beginnen soll.

Hinweise:

1.	Dieses Objekt wird nicht von allen Microcontrollern unterstützt.

2.	Weitere Zugriffe auf das PORTB Register (RB.X), sollten möglichst vermieden werden.


Impuls ausgeben
 Impuls - Ausgang, PWM

Impuls-Ausgang

Mit dem Impuls-Ausgang können Impulse mit einer Genauigkeit von 16-Bit erzeugt werden.

Um die Genauigkeit zu erreichen, wird während der Ausgabe das restliche Programm angehalten.

Es wird nur ein Impuls erzeugt, wenn der EN-Eingang auf High liegt ( nicht invertiert ).

Die Zeit wird mit Hilfe der Internen Taktfrequenz bestimmt. Bei einem 4 MHz Quarz entspricht dieses einer Auflösung von 1 Mikrosekunde (20 MHz = 200 Nanosekunden).

Die Länge des auszugebenden Impuls muss zwischen 50 und 65500 Takten liegen.

PWM

Diese Objekt nutzt den Hardware PWM und ist deshalb nicht bei allen PIC's verfügbar.

Sie können dieses Modul nutzen um analoge Spannungen zu erzeugen.

Der Ausgang erzeugt eine konstante Ausgangsfrequenz (ca. 4 kHz bei 4 MHz Taktfrequenz). Das Puls-Pause-Verhältnis kann geändert werden.

Bei jeder positiven Flanke am CF-Eingang wird der Wert am oberen Eingang in das Duty-Cyle-Register geschrieben. Der Wert muss zwischen 0 und 1023 liegen.


 Vergleichen

Mit dem Vergleichen-Objekt können Variable und Konstante miteinander verglichen werden und in Abhängigkeit davon Bits gesetzt oder gelöscht werden. Es wird immer die obere (A) Variable oder Konstante mit der darunterstehende Variable oder Konstante (B) verglichen und der Ausgang entsprechend auf 1 oder 0 gesetzt.

Der Ausgang kann auch invertiert werden.

Im Info-Dialog (rechte Maustaste) können Sie einstellen, wie verglichen werden soll.

Es stehen folgende Möglichkeiten zur Auswahl:

>	größer

>=	größer oder gleich

=	gleich

<=	kleiner oder gleich

<	kleiner

<>	ungleich

Sie haben zusätzlich die Möglichkeit auszuwählen, ob die Auswertung mit einer Auflösung von 8 oder 16-Bit erfolgen soll.

Bei 16-Bit müssen Sie sicherstellen, das die Quelle auch 16-Bit Werte erzeugt. Ansonsten gibt der Assembler eine Fehlermeldung aus, weil eine Variable mit der Endung _HI fehlt.


 Arithmetik

Alle arithmetischen Funktionen arbeiten ohne Vorzeichen. Der erste Operand steht immer oben.

Es stehen folgende Möglichkeiten zur Auswahl:

+	Addition

-	Subtraktion

x	Multiplikation

:	Division

Sie haben zusätzlich die Möglichkeit auszuwählen, ob die Auswertung mit einer Auflösung von 8 oder 16-Bit erfolgen soll.

Eventuell auftretende Überläufe werden ignoriert.

Beispiel

Eine 16 x 16 Multiplikation ergibt normalerweise 256. Bei einer Auflösung von 8-Bit wird das Ergebnis auf 8-Bit abgeschnitten. Das Ergebnis ist also 0.

Bei einer Division durch 0, wird das Ergebnis auf 255 (8-Bit) bzw. 65535 (16-Bit) gesetzt.


 PIC16C71(1)

Alle Angaben ohne Gewähr

Technische Daten

Versorgungsspannung:	3...6V (max.7,5V)

Stromaufnahme:	2 mA (4 MHz),32 µA (32 KHz)

ROM:	1024 Word (EPROM)

RAM:	36 Byte (PIC16C711 = 68 Byte)

Timer:	1

A/D Wandler	1 (4 Kanäle)

Ein- oder Ausgänge:	13, Ausgänge dürfen bis 25 mA belastet werden (insgesamt aber nur 150 mA)

Brown-Out-Detect:	interner Reset bei Vdd < 4 V (nur PIC16C711)

Vorteil	zuverlässiger Start des PIC's bei langsam ansteigender Versorgungsspannung:

Nachteil:	500 µA zusätzlicher Stromverbrauch

PIC-Varianten

PIC16C71-20/JW	löschbare EPROM Version mit Fenster, arbeitet mit bis zu 20 MHz, für Entwicklung

PIC16C71-04/P	fensterlose Version, einmal programmierbar,für Serienfertigung, bis 4 MHz

PIC16C71-04/SO	fensterlose Version, SMD, einmal programmierbar, bis 4 MHz

Oszillator-typen

RC	Die Taktfrequenz bestimmt eine RC-Kombination

LP	Low-Power, für Quarze oder Keramikschwinger bis 100 kHz

XT	für Quarze oder Keramikschwinger bis 4 MHz

HS	High-Speed, für Quarze oder Keramikschwinger bis 20 MHz


 Einstellungen Parsic

Signalnamen automatisch erzeugen

Aktiviert, werden beim verbinden von Objekten automatisch die Signalnamen erzeugt.

Bei Bit-Signalen -> Sx.x

Bei Byte-Signalen -> Sx

Fenster automatisch anordnen

Aktiviert, werden beim öffnen bzw. schließen der Fenster die Größe der verbleibenden Fenster automatisch angepasst.

3D Darstellung

Aktiviert, bekommen alle Objekte den 3D Look verpasst.

Rechte-Maus-Taste zentriert

Aktiviert, wird beim Klicken mit der rechten Maustaste die Ansicht so verschoben, dass dieser Punkt der Mittelpunkt des Fensters wird. Diese Funktion ist auch beim Erstellen, Positionieren, Verschieben und Verbinden von Objekten aktiv.

(nur Funktionsplan)

Pfeile bei schrägen Verbindungen

Aktiviert, werden Anfang und Ende einer Verbindung mit Pfeilen versehen, wenn sie nicht im rechten Winkel liegen.

Auswählen ohne Shift (Umschalt)

Aktiviert, können Objekte auch ohne Zuhilfenahme der Shift-Taste selektiert werden.

Verbindungen im rechten Winkel

Aktiviert, werden Verbindungen im rechten Winkel verlegt. Mit Hilfe der Shift-Taste kann man die Anfangsrichtung umschalten.

Aktualisierung-Simulation

Dieser Wert bestimmt den Intervall, mit dem bei der Simulation die Daten aktualisiert werden.

siehe auch Simulationpage36


 Projekt-Einstellungen

Angelegt am

Das Datum und die Uhrzeit, an dem die vorliegende Datei erstellt worden ist. Es kann nicht verändert werden.

Letzte Änderung

Das Datum und die Uhrzeit, an dem die Datei zuletzt gespeichert worden ist. Es kann nicht verändert werden.

Passwort

Wenn hier ein Passwort steht, wird beim Laden dieser Datei danach gefragt. Es sind alle Zeichen erlaubt. Zwischen Groß- und Kleinschreibung wird unterschieden.

Version

Hauptversion

Hier kann eine beliebige Zahl zwischen 0 und 255 stehen.

Nebenversion

Auch hier kann eine beliebige Zahl zwischen 0 und 255 stehen.

Build

Beliebige Zahl zwischen 0 und 255.

Automatisch erhöhen

Wenn aktiviert, wird beim speichern der Datei die Build-Version um 1 erhöht. Bei einem Überlauf von 255 -> nach 256 wird die Build-Version wieder auf 0 gesetzt und die Neben-Version um 1 erhöht. Die Haupt-Version bleibt immer unverändert.

Hinweis:	Die Haupt-Version und Neben-Version werden in der Assembler-Direktive >__IDLOCS< eingetragen. Somit ist es möglich nachzuvollziehen, welche Programmversion im PIC "eingebrannt" ist.


 GND und VCC

Mit dem GND- bzw. VCC-Objekt können unbenutzte Eingänge auf einen definierten Pegel gesetzt werden. (z.B. Reset bei einem Zähler)

Leitungen, die an diesem Objekt angeschlossen werden, bekommen bei

GND 	immer Low-Pegel

VCC 	immer High-Pege


 Simulation

Die Simulation kann durch den Button [image] gestartet und gestoppt werden.

Während der Simulation können Eingänge durch anklicken mit der Maus auf High-Pegel oder Low-Pegel gesetzt werden. Dieses gilt auch für Verbindungen und Verbindungsknoten, wenn diese nicht durch Ausgänge aktiv auf High oder Low gezogen werden.

8- und 16-Bit Verbindungen können zwar auch selektiert werden, das hat aber keinen einen Einfluss auf die Simulation.

Objekte mit 8- und 16-Bit Funktionen zeigen ihren Inhalt durch ein kleines Fenster am Objekt an.

Wie zeitabhängige Objekte simuliert werden, hängt von der Aktualisierung ab. Diese können Sie unter Einstellungen > Umgebung verändern. Ob diese Zeit eingehalten wird, hängt von der Geschwindigkeit des verwendeten PCs ab.

Beispiel

Ein Mono-Flop hat eine feste Zeit von 550 ms. Die Aktualisierung steht auf 100 Millisekunden.

Wenn das Mono-Flop aktiv ist, wird bei jeder Aktualisierung, die Zeit um 100 ms erhöht. Das heißt, der Ausgang wird erst nach 6 Durchläufen (600 ms) deaktiviert.

Ein Mono-Flop mit 20 Millisekunden, würde erst nach 100 ms deaktiviert werden. In diesem Fall wäre eine Aktualisierung von 10 ms genauer.

Die Farben für High- und Low-Pegel können unter Einstellungen > Farben > Simulation definiert werden.

Hinweise:	INCLUDE-Dateien können nicht simuliert werden.

Fenster, die nicht geöffnet sind, werden nicht simuliert.


 Label

Labels sind für die Verbindung gleicher Signalnamen auf verschiedenen Funktionsplanseiten zuständig.

Parsic gibt einen eindeutigen Namen vor, den Sie aber ändern können.

Über die rechte Maustaste erreichen Sie den Dialog für die Einstellungen.

Dort können Sie wählen,

1.	ob das Label Quelle oder Ziel ist

2.	dem Ziel-Label das Quell-Label zuordnen.

3.	den Namen ändern.

Wollen Sie den von Parsic vergebenen Namen wiederherstellen, so geben Sie einfach >P:X< ein.

Umbenennen

wird ein Quell-Label umbenannt, ändern sich auch alle Namen, der mit ihm verbundenen Ziel-Label.

wird ein Ziel-Label umbenannt, passiert nichts weiter.

Ändern Sie die Bezeichnung von den Signalen (z.B. S0.7 -> M2.3), die durch Quell- und Ziel-Label verbunden sind, so werden alle Signale dieser "Kette" umbenannt.

Wichtig

Achten Sie unbedingt darauf, das die Quell-Label unterschiedliche Namen erhalten. Parsic kontrolliert z.Z. nicht ob ein Name schon existiert.


EE-Prom
 EEPROM

Mit dem EEProm-Objekt können die Inhalte von Variablen im internen oder externen EE gespeichert werden. Dieses passiert bei jeder positiven Flanke am Eingang des Objekts.

Die angegebenen Variablen werden nach einem Reset automatisch wieder eingelesen.

Bei der Auswahl werden alle zur Zeit angelegten Variablen in der linken Liste angezeigt. Alle Variablen, die Sie speichern möchten, müssen in die rechte Liste verschoben werden.

Hinweis:	Beachten Sie, dass 16-Bit Variable aus 2 Bytes bestehen.

Beispiel

Sie möchten den Zählerstand des 16-Bit Vor- und Rückwärtszählers ZV1 speichern.

Dann tauchen in der linken Liste die Variablen ZV1 und ZV1_HI auf. Beide Variablen müssen markiert und in die rechte Liste verschoben werden.

Internes EE

Wenn Sie diese Auswahl treffen, wird das interne EEProm benutzt. Nicht alle Microcontroller besitzen ein internes EEProm.

Externes EE

Wenn Sie diese Auswahl treffen, wird das externe EEProm benutzt.

Wichtig

Beim ersten Start mit einem "frisch" gebrannten PIC, enthält das EE nur $FF Werte (255). Benutzen Sie den Limiter oder aktivieren Sie die Prüfsumme, um Fehlfunktionen zu vermeiden.

Es darf nur ein Externes EE-Objekt in einem Projekt vorkommen, auch wenn Parsic z.Z. mehrere zulässt.

Hinweise:	Alle Microcontroller mit der Bezeichnung CE haben ein eingebautes externes EEProm (PIC12CExxx, PIC16CExxx).

Dieses EE wird über den II2-Bus angesprochen. Die beiden Steuerleitungen habe die Bezeichnung SDA und SCL.

SDA

Diese ist die Datenleitung des II2-Bus. Der Anschluss ist vom Typ Open-Collector. In der Auswahlliste sind schon 2 Typen vorbelegt:

1.	GPIO.6 = wird verwendet für das EEProm der Microcontroller PIC12CExxx

2.	EEINTF.6 = wird verwendet für das EEProm der Microcontroller PIC16CExxx

Sie können aber auch jeden anderen Anschluss verwenden. Es muss nur beachtet werden, das die Bezeichnung nicht Rx.0 bzw. GP.x ist, sondern PORTx.x bzw. GPIO.x .

SCL

Diese ist die Taktleitung des II2-Bus. Der Anschluss ist vom Typ Open-Collector. In der Auswahlliste sind schon 2 Typen vorbelegt:

1.	GPIO.7 = wird verwendet für das EEProm der Microcontroller PIC12CExxx

2.	EEINTF.7 = wird verwendet für das EEProm der Microcontroller PIC16CExxx

Sie können aber auch jeden anderen Anschluss verwenden. Es muss nur beachtet werden das die Bezeichnung nicht Rx.0 bzw. GP.x ist, sondern PORTx.x bzw. GPIO.x .

mit Prüfsumme speichern

Wenn die Werte in das EE geschrieben werden, wird eine 1 Byte große Prüfsumme angelegt.

Werden nach einem Reset die Werte ausgelesen, wird diese Prüfsumme kontrolliert. Stimmt sie nicht mit den berechneten Werte überein, werden alle Variable, die in der rechten Liste angegeben sind, mit 0 initialisiert.

überprüfen nach schreiben (Verify)

Nach dem schreiben eines Bytes, wird dieses noch einmal gelesen. Stimmt es nicht überein, wird der Schreibvorgang wiederholt.

Slave-Adresse

Beim EEProm des Typs 24Cxx müssen sie hier die Hardware Adresse angeben. Sie wird bestimmt durch die Adressleitungen A0, A1 und A2 des EEs.

Hinweis:	Die Standardeinstellung ist 0.


 Limiter

Der Limiter überprüft den Inhalt der Eingangsvariablen mit dem oberen und unteren Limit.

Wenn der Eingang > oberes Limit, dann Ausgang = oberes Limit.

Wenn der Eingang < unteres Limit, dann Ausgang = unteres Limit.

Ansonsten

Ausgang = Eingang

Hinweis:	Für oberes und unteres Limit dürfen Konstante und/oder Variable angegeben werden.

Fehlerausgänge

Der Limiter besitzt 2 Fehlerausgänge.

Wird das obere Limit überschritten, so wird der obere Ausgang gesetzt.

Wird das untere Limit unterschritten, so wird der untere Ausgang gesetzt.

Die Nutzung dieser Ausgänge ist optional. Wenn an ihnen nichts angeschlossen wird, dann erzeugt Parsic auch keinen Quelltext für diese Ausgänge.

Typ

8-Bit

Der Eingang wird als 8-Bit Variable behandelt. Dieses gilt ebenso für das obere und untere Limit, wenn sie als Variable angegeben sind.

16-Bit:

Der Eingang wird als 16-Bit Variable behandelt. Dieses gilt ebenso für das obere und untere Limit, wenn sie als Variable angegeben sind.


 Bit- und Byte-Verteiler

Funktion Bit -> Byte:

Es werden gezielt bestimmte Bits auf die Ausgangsvariable übertragen.

Dabei gilt:

Ausgang Bit0 = IN0

Ausgang Bit1 = IN1

Ausgang Bit2 = IN1

...

Ausgang Bit15 = IN15

Hinweise:	Ist die Anzahl der Eingänge > 8 , dann ist die Variable am Ausgang eine 16-Bit Variable.

Die Eingänge müssen nicht durchgehend belegt werden.

Für nicht belegte Eingänge wird kein Quelltext erzeugt.

Funktion Byte -> Bit:

Es können gezielt bestimmte Bits der Eingangsvariablen auf einzelne Bits an den Ausgängen übertragen werden.

Dabei gilt:

OUT0 = Eingang Bit0

OUT1 = Eingang Bit1

...

OUT15 = Eingang Bit15

Hinweise:	Ist die Anzahl der Ausgänge > 8 , dann muss die Variable am Eingang eine 16-Bit Variable sein.

Die Ausgänge müssen nicht durchgehend belegt werden.

Für nicht belegte Ausgänge wird kein Quelltext erzeugt.


LCD-Modul Anschlüsse definieren
 LCD-Modul - Anschlüsse definieren

Es werden alle LCD-Module unterstützt die auf Basis des HD44780 von Hitachi arbeiten.

Um auch bei den kleinen PIC's noch genügend Ein- oder Ausgänge zur Verfügung zu haben, werden von den 11 Steuerleitungen nur 6 von Parsic benutzt.

Angeschlossen an Port (Rx)

Tragen Sie hier ein, an welchem Ausgangs-Port das LCD-Modul angeschlossen wird. Mehrere LCD-Module können parallel geschaltet werden. Geben Sie dann den gleichen Port angeben z.B. RB.

Es werden nur die Bits Rx.0...Rx.4 benutzt. Die Bits Rx.5...Rx.7 können weiterhin als normale Ein- oder Ausgänge verwendet werden.

Anschlussbild mit 2 LCD-Modulen

Freigabe Ausgang (E)

Über diesen Anschluss wird die Anzeige aktiviert, wenn Zeichen an sie gesendet werden. Jedes LCD-Modul benötigt sein eigenen Freigabe Ausgang z.B. RB.5 .

Zeilen

Geben Sie hier an, wieviele Zeilen das LCD-Modul hat. Typische Werte sind 1...4.

Zeichen pro Zeile

Geben Sie hier an wieviele Zeichen in eine Zeile passen. Typische Werte sind 8...40.

Ausgabeverzögerung

Parsic wartet nach jedem Zeichen ca. 50 µSek., bis das nächste Zeichen ausgegeben wird.

Es kann aber vorkommen, dass einige LCD-Module wesentlich langsamer getacktet werden als in den Datenblättern angegeben wird (typ. 270 kHz). Trifft dieses zu, werden nicht lesbare Zeichen oder Zeichen an einer falschen Position ausgegeben.

Hier können Sie dann im geringen Umfang bestimmen wie lange der Microcontroller warten soll bis zur Ausgabe des nächsten Zeichens.

Dabei gilt:

x 1 = ca. 50µSek. Verzögerung.

x 2 = ca. 100µSek. Verzögerung.

x 3 = ca. 150µSek. Verzögerung.

Anschlussbelegung

Pin	Bez.	PIC

1	GND	GND

2	VCC	VCC

3	VQ	Poti

4	RS	Rx.4

5	R/W	nicht benutzt - muss auf GND liegen

6	E	frei definierbar

7	D0	nicht benutzt

8	D1	nicht benutzt

9	D2	nicht benutzt

10	D3	nicht benutzt

11	D4	Rx.0

12	D5	Rx.1

13	D6	Rx.2

14	D7	Rx.3


LCD-Modul Texte anzeigen;LCD-Modul Variable anzeigen
 LCD-Modul Texte oder Variable anzeigen

Mit diesem Objekt können Texte oder Variable auf einem LCD-Modul ausgegeben werden. Bei jeder Flanke am CF-Eingang, wird der Text oder die Variable an der vorgegebenen Position angezeigt.

Position

Tragen Sie hier die Position ein, an der die auszugebenden Daten erscheinen sollen. Die linke obere Ecke hat die Position X=0 und Y=0. Die Werte die Sie hier eintragen, dürfen Konstante oder Variable (8-Bit) sein.

Ausgabe auf

Wählen Sie aus der Liste ein LCD-Modul aus, auf dem der Text oder die Variable angezeigt werden soll. Ist noch kein LCD-Modul-Objekt vorhanden, ist die Liste leer.

Anzeige-Text

Geben Sie im unteren Editierfeld den Text ein, der angezeigt werden soll. Wenn Sie das Editierfeld leer lassen, wird ein Befehl zum löschen der Anzeige erzeugt.

Sonderzeichen und Umlaute müssen direkt als Zeichencode eingegeben werden.

Bei der Simulation wird an Stelle des Zeichencodes ein '#' Zeichen angezeigt. Es kann aber auch ein Zeichen angegeben werden, welches bei der Simulation angezeigt wird. Für die Erzeugung des Quelltextes hat dieses Zeichen keine Auswirkung.

Beispiele

ß = #$E2# oder #226# oder #226,ß#

ä = #$E1# oder #225# oder #$E1,ä#

ö = #$EF# oder #239#

Zeichensatz HD44780A00

Zeichensatz HD44780A02

Anzeige-Variable

Im Funktionsplan wird ein zusätzlicher Anschluss im Objekt angezeigt. An diesem wird das Signal angeschlossen, dessen Wert angezeigt werden soll.

Die Ausrichtung in der Anzeige ist immer rechtsbündig.

Anzeige-Dezimal

Ist es eine 8-Bit Variable, so wird ein 3-stelliger dezimaler Wert angezeigt.

Ist es eine 16-Bit Variable, so wird ein 5-stelliger dezimaler Wert angezeigt.

Unter >Führende Nullen< könne Sie wählen, ob führende Nullen angezeigt werden sollen oder durch Leerzeichen ersetzt werden.

Ist >Konstante Länge< angewählt, so wird die Ausgabe auf die angegebene Länge begrenzt.

Beispiel mit Länge = 2:

Wenn die Variable am Eingang eine 123 enthält, dann wird nur eine 23 angezeigt.

Ist die angegebene Länge größer als 3 (8-Bit Variable) bzw. 5 (16-Bit Variable), so wird sie ignoriert.

Anzeige-Hexadezimal

Ist es eine 8-Bit Variable, so wird ein 2-stelliger hexadezimaler Wert angezeigt.

Ist es eine 16-Bit Variable, so wird ein 4-stelliger hexadezimaler Wert angezeigt.

Anzeige-Binär

Ist es eine 8-Bit Variable, so wird ein 8-stelliger binärer Wert angezeigt.

Ist es eine 16-Bit Variable, so wird ein 16-stelliger binärer Wert angezeigt.

Unter >Führende Nullen< könne Sie wählen, ob führende Nullen angezeigt werden sollen oder durch Leerzeichen ersetzt werden.


 Sleep-Modus

Mit diesem Objekt kann man den Microcontroller in den Sleep Modus versetzen.

Liegt der IN-Eingang auf High-Pegel, so wird der Sleep-Modus aktiviert, das Programm wird gestoppt und der Oszillator abgeschaltet.

Zum wiederherstellen der normalen Funktion stehen 2 Möglichkeiten zur Verfügung.

1.	eine positive Flanke am RB0-Eingang

2.	eine Änderung des Pegel's an RB4, RB5, RB6...RB7

Verbleibt der IN-Eingang auf High-Pegel, so wird das Programm einmal durchlaufen und dann der Sleep-Modus wieder aktiviert.

Einschränkungen:

1.	Um diese Funktion nutzen zu können, darf der Watch-Dog-Timer nicht aktiviert sein. Er würde sonst nach einer bestimmten Zeit einen Reset auslösen.

2.	Diese Funktion ist noch nicht für die Microcontroller der Reihe 12C(E)XXX implementiert.


 Tools - Einstellungen

Unter diesem Menüpunkt können Sie das Hauptmenü Tools konfigurieren.

Um ein Programm zum Menü Tools hinzuzufügen,

wählen Sie Hinzufügen. Parsic zeigt dann das Dialogfenster Tools-Eigenschaften an, in dem Sie Informationen über das Programm, das Sie hinzufügen wollen, angeben können.

Um ein Programm aus dem Menü Tools zu löschen,

wählen Sie das Programm aus, das Sie löschen möchten und drücken Sie Löschen.

Um ein Programm im Menü Tools zu verändern,

Wählen Sie das Programm aus, das Sie verändern möchten, und drücken Sie dann Bearbeiten.  Parsic zeigt dann das Dialogfenster Tools-Eigenschaften mit den Informationen des entsprechenden Programms an.

Dialogfenster Tools Optionen

Verwenden Sie dieses Dialogfenster, um Programme des Menüs Tools hinzuzufügen, zu löschen oder zu bearbeiten.

Listenfeld Tools

Listet die Programme auf, die augenblicklich im Menü Tools installiert sind.

Schalter Hinzufügen

Klicken Sie auf Hinzufügen, um das Dialogfenster Tools-Eigenschaften anzuzeigen. In diesem Dialogfenster können Sie den Menünamen, den Pfad und die Anfangsparameter für das Programm angeben.

Schalter Löschen

Klicken Sie auf Löschen, um das augenblicklich markierte Programm aus dem Menü Tools zu löschen.

Schalter Bearbeiten

Klicken Sie auf Bearbeiten, um das Dialogfenster Tools-Eigenschaften anzuzeigen. In diesem Dialogfenster können Sie den Menünamen, den Pfad und die Anfangsparameter für das Programm bearbeiten.


 Tools - Eigenschaften

Verwenden Sie das Dialogfenster Tools-Eigenschaften, um die Eigenschaften eines Programms aus dem Menü Tools einzugeben, oder um diese Eigenschaften zu bearbeiten.

Um das Dialogfenster Tools Eigenschaften anzuzeigen,

Klicken Sie auf Hinzufügen oder Bearbeiten im Dialogfenster Toolspage47.

Editierfeld Titel

Geben Sie den Namen des Programms an, das Sie hinzufügen. Dieser Name erscheint dann im Menü Tools.

Sie können eine Tastaturabkürzung zu dem Menübefehl angeben. Setzen Sie vor den Buchstaben ein "&".

Editierfeld Programm

Geben Sie den Ort an, an dem das Programm steht, das Sie hinzufügen möchten. Sie können den gesamten Pfad zu Ihrem Programm angeben. Klicken Sie den Schalter Durchsuchen, um in Ihren Laufwerken nach dem Pfad und dem Verzeichnis zu suchen.

Editierfeld Arbeitsverzeichnis

Geben Sie hier das Arbeitsverzeichnis für Ihr Programm an. Parsic verwendet ein Standardarbeitsverzeichnis, wenn Sie den Programmnamen im Editierend Programm auswählen. Sie können den Pfad verändern, wenn dies nötig ist.

Editierfeld Parameter

Geben Sie die Startwerte für die Programmparameter ein. Zum Beispiel möchten Sie Ihrem Programm beim Start einen Dateinamen übergeben. Sie können die Parameter eintippen oder/und vordefinierte Makros angeben.

Parsic kennt drei vordefinierte Makros.

Makro	Bedeutung

$PJT	Bezieht sich auf den vollen Pfad des Assembler-Quelltext des aktuellen Projekts. Wenn Sie z.B. in C:\PROJ1 arbeiten, und den Quelltext unter BSP1.ASM gespeichert haben, so übergibt Parsic bei Programmstart "C:\PROJ1\BSP1.PJT" an das Programm. gedacht ist dieses Makro für Mplab.

$ASM	Bezieht sich auf den vollen Pfad des Assembler-Quelltext des aktuellen Projekts. Wenn Sie z.B. in C:\PROJ1 arbeiten, und den Quelltext unter BSP1.ASM gespeichert haben, so übergibt Parsic bei Programmstart "C:\PROJ1\BSP1.ASM" an das Programm.

$HEX	Bezieht sich auf den vollen Pfad des Assembler-Quelltext des aktuellen Projekts. Wenn Sie z.B. in C:\PROJ1 arbeiten, und den Quelltext unter BSP1.ASM gespeichert haben, so übergibt Parsic bei Programmstart "C:\PROJ1\BSP1.HEX" an das Programm.

Schalter Suchen

Klicken Sie auf Suchen, um den Namen für das Editierfeld Programm auszuwählen. Wenn Sie auf Suchen klicken, öffnet Parsic ein Dialogfenster, in dem Sie das ausführbare Programm auswählen können.


 Objektreihenfolge ändern

Parsic legt die einzelnen Objekte in der Reihenfolge im Speicher ab, wie sie im Funktionsplan platziert worden sind. Analog dazu wird, mit wenigen Ausnahmen, auch der Quelltext erzeugt.

Unter bestimmten Umständen (z.B. bei INCLUDE-Dateien) kann es erforderlich sein, diese Reihenfolge zu ändern.

Klicken Sie einfach auf den Objektnamen, dessen Position Sie verändern wollen.

Mit dem Schaltern >nach vorne< bewegen Sie das Objekt in Richtung Quelltext früher erzeugen.

Mit dem Schaltern >nach hinten< dem entsprechend in Richtung Quelltext später erzeugen.

Diese Objekte werden nicht angezeigt:

1.	DAT-Objekt, wenn es die Bezeichnung ADCx hat.(A/D-Wandler)

2.	Impulse-Messen

3.	Label

4.	Kommentare


 One-Shot

Diese Objekt erzeugt einen Impuls für einen Programmdurchlauf.

Funktion

Bei jeder positiven Flanke am Eingang wird der Ausgang gesetzt.

Unabhängig vom Zustand des Eingangs, wird der Ausgang bei der nächsten Bearbeitung (nach einem Programmdurchlauf) wieder zurückgesetzt.

Der Ein- und Ausgang kann auch invertiert werden.


 UART

siehe auch UART-Daten

Universal Asynchronus Receiver Transmitter

Mit diesem Objekt definieren Sie die Einstellungen der Seriellen-Schnittstelle. Nicht alle Microcontroller haben eine eingebaute UART. Es gibt also Fehlermeldungen, wenn Sie einen PIC benutzen der keine Hardware UART besitzt.

Baudrate

Wählen Sie hier, mit welcher Geschwindigkeit die Datenübertragung stattfinden soll.

Diese Werte beziehen sich auf eine externe Taktfrequenz von 4 MHz.

Das Format ist immer 8N1 (8-Bit Daten, keine Parität, 1 Stop-Bit)

Selbstdefiniert

Wenn keine passende Baudrate zur Verfügung steht, können Sie hier die Werte für die Hardware-Initialisierung selber bestimmen.

Wenn BRGH = 0 ist dann lautet die Formel für die Berechnung der Baudrate:

X = Wert für SPBRG (Baudrategenerator, muss zwischen 0 - 255 liegen)

Fosc = externe Taktfrequenz (typ. 4 MHz)

Baudrate=Fosc / (64 (X + 1))

oder umgestellt:

(Fosc / 64) / Baudrate - 1

Wenn BRGH = 1 ist dann lautet die Formel für die Berechnung der Baudrate:

Baudrate=Fosc / (16 (X + 1))

oder umgestellt:

(Fosc / 16) / Baudrate - 1

Beispiel:

Baudrate 19200, externe Taktfrequenz = 4 MHz, BRGH = 1

SPRG = (4000000 / 16) / 19200 - 1

SPRG = 250000 / 19200 - 1

SPRG = 13,0208 - 1

SPRG = ~12

Den Wert 12 müssen Sie bei SPRG eintragen.

Tx-Pin

Hier müssen Sie angeben, an welchen Pin die Daten ausgeben werden. Wenn Sie die Hardware-UART benutzen ist das ein ganz bestimmter Anschluss (typ. RC.6).

Rx-Pin

Hier müssen Sie angeben, an welchen Pin die Daten eingelesen werden. Wenn Sie die Hardware-UART benutzen ist das ein ganz bestimmter Anschluss (typ. RC.7).

Anschlussbeispiel RS232

Anschlussbeispiel RS485

DIR-Pin (nur bei Halb-Duplex)

Dieser Anschluss schaltet, wenn die RS485 Schnittstelle mit nur 3 Leitungen genutzt werden soll, die Datenrichtung um. Normalerweise liegt dieser Ausgang auf Low-Pegel (Empfang). Wenn Daten übertragen werden sollen, wird dieser Ausgang bis zum Ende der Übertragung auf High-Pegel gesetzt (Senden). Diese passiert ohne Rücksicht darauf, ob nicht irgendein Objekt gerade Daten empfangen soll. Mit Hilfe der Aktiv-Ausgänge (UART-Daten-Objekteudata), können Sie aber diesen Vorgang beeinflussen.

mit Prüfsumme

Wenn aktiviert, wird den übertragenen Daten am Ende immer eine 1 Byte große Prüfsumme angehängt bzw. eine 1 Byte große Prüfsumme erwartet.

Nur Empfang:

Die empfangene Prüfsumme wird mit der intern berechneten Prüfsumme verglichen. Nur bei Übereinstimmung, werden die Daten vom Eingangspuffer in die Variablen, die Sie in der rechten Liste angegeben haben, übertragen.

Die Prüfsumme wird folgendermaßen berechnet (PS = Prüfsumme):

1.	PS = 170 (HEX = $AA)

2.	PS = PS + 1.Byte

3.	PS = PS + 2.Byte

4.	usw.

Beispiel

Der 16-Bit Zähler ZV5 hat zur Zeit den Wert 1000. In der rechten Liste steht dann:

ZV5 (enthält z.Z.eine 232 ($E8) = Low-Byte)

ZV5_HI (enthält z.Z. eine 3 = High-Byte)

(3 x 256 + 232 = 1000)

PS = 170 + 232 + 3 = 405 = abgeschnitten auf die unteren 8-Bit = 149

Übertragen wird dann diese Bytefolge:

<232><3><149>


 UART-Daten

siehe auch UART

Mit diesem Objekt werden Daten über die serielle Schnittstelle gesendet oder empfangen.

Aktiv-Ausgang (ACT)

Für beide Funktionen gilt:

Übertragen

Der ACT-Ausgang bleibt solange auf High-Pegel, bis die Daten übertragen worden sind.

Empfangen

Der ACT-Ausgang bleibt solange auf High-Pegel, bis die Daten korrekt empfangen oder ein Fehler aufgetreten ist.

Mit Hilfe dieses Ausganges können Sie verhindern, dass zwei Objekte Daten gleichzeitig empfangen bzw. übertragen können.

Parsic verwendet diesen Ausgang um den Datenfluss zu steuern. Es muss also zumindest eine Verbindungsleitung angeschlossen werden, auch wenn Sie seine Funktion nicht nutzen wollen.

Funktion - übertragen

In der linken Liste (im RAM) werden alle zur Zeit angelegten Variable angezeigt.

Schieben Sie alle Variablen, die übertragen werden sollen, in die rechte Liste. Die Reihenfolge in der rechten Liste bestimmt auch die Reihenfolge bei der Übertragung.

Bei einer positiven Flanke am Enable-Eingang (EN), wird der Ausgangspuffer mit den angegebenen Variablen (+ Prüfsumme) gefüllt und für die Übertragung freigegeben. Jede weitere Flanke hat keine Auswirkung, bis die Übertragung beendet worden ist.

Funktion - empfangen

In der linken Liste (im RAM) werden alle zur Zeit angelegten Variable angezeigt. Schieben Sie alle Variablen in die rechte Liste, die die empfangenen Daten erhalten sollen.

Bei einer positiven Flanke am Enable-Eingang, wird der Eingangspuffer initialisiert und für den Empfang freigegeben. Es werden nur so viele Daten empfangen, wie in der rechten Liste angegeben wurde (jede Zeile ist ein Byte). Jede weitere Flanke hat keine Auswirkung, bis der Empfang beendet worden ist.

Wichtig:

Treten beim Empfang der Daten oder bei der Prüfsumme (wenn aktiviert) Fehler auf, wird der Empfang abgebrochen und der ACT-Ausgang auf Low-Pegel gesetzt.