Hallo Microcontroller Fans,
Ich bin neu hier, und bin gespannt was mich erwartet.
Ich habe zu meinem Problem schon im Forum gesucht, aber leider nichts
gefunden. Sollte jemand von einem existierendem Tread wissen, bitte
lasst es mich wissen.
So, nun erst zu mir. Ich kenne mich in Elekrtrotechnik soweit aus, und
kann mich gewählt ausdrücken ;) Ich habe ein PICSTRAT PLUS
Programmiergerät, MicroBasic und MPLAB. Ich schreibe in MicroBasic mein
Programm, packe es in ein .hex File, und schreibe es mit MPLAB auf
meinen PIC.
So, nun habe ich schon lange mit einem PIC 16F84A herum probiert. Doch
ich bin bei dem Teil schnell an die Grenzen gestoßen. Mit LCD-Display
und Co. wirds da nicht viel. Ich habe mir also nun einen PIC 18F4550
zugelegt. Das Teil hat doch was drauf ;) Ich habe mir gedacht, ich
schreibe erstmal das Beispiel eines Led-Blinkers drauf, um zu sehen ob
soweit alles geht. Doch da fängt es an. Es geht nicht. (Problem kommt
noch.)
Ich schreibe folgendes Programm mit folgenden Einstellungen:
-------------------------------------------------------
1
program NWE
2
3
4
main:
5
PORTA = 0 ' initialize PORTA
6
TRISA = 0 ' configure PORTA as output
7
8
while TRUE
9
PORTA = not PORTA ' toggle PORTA
10
Delay_ms(1000) ' one second delay
11
wend
12
end.
------------------------------------------------------
Device: 18F4550
Clock: 48,00000MHz
------------------------------------------------------
Einstellungen siehe Anhang. (1.jpg)
------------------------------------------
Wenn ich den Pic nun wie folgt anschließe:
Beide VDD -> +5V
Beide VSS -> Masse 0V
Pin 1 also den MCLR -> über 10K auf +5V
Den 48MHz Quarz -> über 2 22pF auf Masse
LED mit 330 Ohm Rv auf Masse gelegt. (Einen der PortA)(Habe alle
versucht, immer das selbe)
-------------------------------------------
Nun die Reaktion des Pics:
Die LED leutet garnicht. Mehr passier nicht.
Wenn ich das ganze mit einem 4Mhz Quarz mache, dann leutet Sie
dauernd.(Ich wähle dabei aber bei Oscillator die Option XT aus. Und
stelle natürlich vorher 4MHz ein ;)
Habe leider gerade kein Oszi, zur Hand.
Sind meine Einstellungen (Bild) falsch, oder habe ich einen Denkfehler
in meinem Programm ? Oder fehlt bei der Beschaltung etwas ?
Hoffe Ihr könnt mir helfen.
lg Tim
**********************************************************************
PS: Importiere ich das File zum Brennen in MPLAB, und drücke dann auf
Programm -> Program, dann kommt folgendes:
A newer version of the PICSTART Plus firmware operating
system is available, and may be required for programming
some devices. The newer version is located in your
MPLAB IDE\PicstartPlus directory. Refer to the topic,
'Upgrading the PICSTART Plus Operating System' in the
PICSTART Plus Help file for instructions.
PICSTART Plus Firmware Version 04.40.01
PICSTART Program\Verify Report
06-Nov-2010, 23:45:37
Device Type: PIC18F4550
Address Range 0-5f
Programming/Verification completed successfully
PICSTART Program\Verify Report
06-Nov-2010, 23:46:04
Device Type: PIC18F4550
Programming/Verification completed successfully
************************************************************************
************************************************************************
Drücke ich auf Projekt -> Build All, kommt folgendes Problem;
----------------------------------------------------------------------
Debug build of project
`C:\Users\User\Documents\PIC-Vorlagen\PIC18F4550.mcp' started.
Language tool versions: MPASMWIN.exe v5.37, mplink.exe v4.37, mplib.exe
v4.37
Preprocessor symbol `__DEBUG' is defined.
Sat Nov 06 23:53:22 2010
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "D:\Programme\MPLAB\MPASM Suite\MPASMWIN.exe" /q /p18F4550
"18F4550TMPO.ASM" /l"18F4550TMPO.lst" /e"18F4550TMPO.err" /d__DEBUG=1
Error[149] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 52 : Directive only allowed when
generating an object file
Error[180] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 54 : RES directive cannot reserve
odd number of bytes in PIC18 absolute mode
Error[180] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 55 : RES directive cannot reserve
odd number of bytes in PIC18 absolute mode
Error[180] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 56 : RES directive cannot reserve
odd number of bytes in PIC18 absolute mode
Error[149] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 58 : Directive only allowed when
generating an object file
Error[180] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 60 : RES directive cannot reserve
odd number of bytes in PIC18 absolute mode
Error[149] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 67 : Directive only allowed when
generating an object file
Error[149] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 75 : Directive only allowed when
generating an object file
Error[149] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 84 : Directive only allowed when
generating an object file
Error[149] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 93 : Directive only allowed when
generating an object file
Error[149] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 103 : Directive only allowed when
generating an object file
Error[118] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 110 : Overwriting previous address
contents (0000)
Error[118] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 110 : Overwriting previous address
contents (0001)
Error[118] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 118 : Overwriting previous address
contents (0002)
Error[118] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 118 : Overwriting previous address
contents (0003)
Error[118] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 119 : Overwriting previous address
contents (0008)
Error[118] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 119 : Overwriting previous address
contents (0009)
Error[118] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 127 : Overwriting previous address
contents (0018)
Error[118] D:\PROGRAMME\MPLAB\MPASM
SUITE\TEMPLATE\OBJECT\18F4550TMPO.ASM 127 : Overwriting previous address
contents (0019)
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project
`C:\Users\User\Documents\PIC-Vorlagen\PIC18F4550.mcp' failed.
Language tool versions: MPASMWIN.exe v5.37, mplink.exe v4.37, mplib.exe
v4.37
Preprocessor symbol `__DEBUG' is defined.
Sat Nov 06 23:53:23 2010
----------------------------------------------------------------------
BUILD FAILED
************************************************************************
***
Sagt euch das etwas ?
Ach, und ich habe in MPLAB folgendes eingefügt:
(2.jpg)
Hi,
Ich weiß jetzt nicht ob ich etwas übersehen habe, finde dein Vorgehen
etwas "umständlich" und kenne PICBasic überhaupt nicht...
Der Sprung von PIC16F84 auf 18F4550 ist natürlich schon eine Hausnummer,
da liegen ca. 15 Jahre dazwischen... Im µC Bereich sind das Welten!
Was mir jetzt ins Auge gesprungen ist:
Stelltst du in deinem Programm - evtl. im nichtgeposteten Bereich- den
Port A auf Digital IO ein? Ich meine Standartmäßig ist der Analog Input.
Der Port A wird im gegensatz zum Portb0-4 NICht über die Config Fuses,.
sondern ausschließlich über die Register kontrolliert!
Wenn der PORTA natürlich Analog Input ist, dann kannst du mit Tris und
co nichts anfangen.
Gruß
Carsten
P.S. deine Entwicklungshardware ist vorsintflutlich! Das Picstart Plus
ist ein 20 Jahre altes Tool das absolut nicht mehr für aktuelle
entwicklungen eingesetzt gehört... Die einzige berechtigung für die
Picstart plus in meinem bestand sind die alten 16C Pics, die ich ab und
an noch proggen muss und die von neueren Geräten nicht mehr unterstützt
werden...
Besorge dir wenn es halbwegs Spass machen soll einen orignal Microchip
PICKIT2 oder PicKit3! Den Pickit2 bekommst du NEU bereits ab ca 25Eur.
incl Steur, gebraucht manchmal für 10 Eur.! Damit kannst du ohne daas du
den µC aus dem Sockel ziehen muss direkt in MPLAB programmieren und AUCH
DEBUGGEN. Du könnstest also zum beispiel jetzt sehen, was dein Proz
gerade macht. Ob das Prog also läuft, nur das ADCON register falsch
belegt ist... Oder ob der WDT verrückt spielt oder sich gar nichts
tut...
Der PicKIT2 kann alle 10F, 12F, 16F, und 18F Pics proggen. ICh glaube
auch alle (oder die meisten) 24F und einige 32F. Der etwas neuere PK3,
der so ab 35 Eur. erhältlich ist (OHne Testplatine, mit Testplatine
nennt sich das dann Debug-Express und kostet ca. 60 Eur.) kann ALLE PIC
mit F! in der Mitte.
Da lohnt sich kein ärgern mit alten Geräten, umstecken und
ersatzsoftware und auch erst recht kein Selbstbau!
Tim E. schrieb:> Device: 18F4550> Clock: 48,00000MHz
Eher nicht so gut - am oberen Limit. Ein kleiner Tipp. Alle PIC18FXXXX
haben eine PLL intus. Das heißt man nehme einen 10 MHz-Quarz an die
beiden Oszillatorpins -> PLL bei den Config-Bits einstellen = 40 MHz!
(PLL *4 = Quarz * 4). Damit hast du intern 40 MHz. Das erspart dir
Probleme mit den Kondensatoren (48 MHz = hoher Frequenzbereich) über die
niemand so recht bescheid weiss da im Datenblatt nichts darüber vermerkt
ist. Bei hohen Frequenzen und Betrieb an den äußeren Grenzen (48MHz =
Maximalfrequenz) können diese Kondensatoren schnell zu Plagegeistern und
Fehlerquellen werden.
Tim E. schrieb:> Ich schreibe folgendes Programm mit folgenden Einstellungen:>> -------------------------------------------------------program NWE>>> main:> PORTA = 0 ' initialize PORTA> TRISA = 0 ' configure PORTA as output>> while TRUE> PORTA = not PORTA ' toggle PORTA> Delay_ms(1000) ' one second delay> wend> end.> ------------------------------------------------------
Grundsätzliches:
1) Man verwendet bei PIC18 immer den sog. Latch zum Output. Das heißt
man schreibt nicht mehr PORTA=0xFF sondern LATA=0xFF.
Bei den PIC16F war es ein bekannter Fehler, dass bei manchen
Bitmanipulationen im PORTX immer wieder Fehler auftraten. Das hat man
bei PIC18 verbessert. Darum:
Schreiben tut man immer im LATX (X=Port)
und
Einlesen tu man immer im PORTX (X=Port)
2) Wie siehts mit Definitionen der Frequenz im Compiler(!) aus. Soll
heißen um Delays richtig berechnen zu können muss der Compiler die
Quarzfrequenz kennen. Ansonsten könnte das Blinken zu schnell für das
Menschliche Auge sein.
3) Ich bin kein Basicfreund. Der PIC muss in einer Endlosschleife hängen
(tut er glaube ich auch) ansonsten macht er nach beenden des
Hauptprogramms sofort einen Reset und es geht von vorne los.
Fazit: Ich habe den Oszillator im Verdacht - darum nimm mal den internen
Oszillator (Datenblatt + Configbits)
Carsten Sch. schrieb:> Besorge dir wenn es halbwegs Spass machen soll einen orignal Microchip> PICKIT2 oder PicKit3! Den Pickit2 bekommst du NEU bereits ab ca 25Eur.> incl Steur, gebraucht manchmal für 10 Eur.! Damit kannst du ohne daas du> den µC aus dem Sockel ziehen muss direkt in MPLAB programmieren und AUCH> DEBUGGEN. Du könnstest also zum beispiel jetzt sehen, was dein Proz> gerade macht. Ob das Prog also läuft, nur das ADCON register falsch> belegt ist... Oder ob der WDT verrückt spielt oder sich gar nichts> tut...> Der PicKIT2 kann alle 10F, 12F, 16F, und 18F Pics proggen. ICh glaube> auch alle (oder die meisten) 24F und einige 32F. Der etwas neuere PK3,> der so ab 35 Eur. erhältlich ist (OHne Testplatine, mit Testplatine> nennt sich das dann Debug-Express und kostet ca. 60 Eur.) kann ALLE PIC> mit F! in der Mitte.>> Da lohnt sich kein ärgern mit alten Geräten, umstecken und> ersatzsoftware und auch erst recht kein Selbstbau!
In dieser Hinsicht muss ich meinem Vorrender Recht geben. Es macht
absolut mehr Spaß mit neuer Hardware. Ich empfehle dir das auch dringen
in der Hinsicht von Programmierfehlern, etc gerade bei nicht ganz
sauberem und HF-konformen Schaltungsaufbau einer Experimentierplatine.
Viel Erfolg
Hi,
der Hinweis von Michael, das es bei den 18Fx wesentlich einfacher ist
einen Quarz von geringererFrequenz zu nehmen - und wenn man dann doch
einen höhere Frequnez braucht die durch die PLL regeln zu lassen, ist
grundsätzlich richtig.
Insbesondere das bei einem 48Mhz Quarz die Kapazitäten der Kondensatoren
UND die Parasitätrkapazitäten der Leiterbahn bei ungünstiger Führung
derselben, eine kritische rolle spielen können ist vollkommen korrekt.
Allerdings würde ich von 10MHz abstand nehmen. Bei den USB Pics ist es
zwingend notwendig, zumindest wenn man später mal die USB funktion
nutzen will, das die Quarzfrequenz 4MHz oder ein ganzes vielfaches von
4MHz ist!
(Ich nutze für 18F Pics i.d.R 12MHz, seltener auch mal 4, 8 oder 20Mhz
wenn ich diesen Takt gleichzeitg noch für andere Zwecke auf dem Board
brauchen kann.) Auch sind die meisten Library Funktionen von Microchip
entweder auf 8Mhz oder aber 96MHz PLL Takt (=48Mhz Systemtakt)
ausgelegt.
DAHER: Lieber 8 oder 12MHz Quarze als 10MHz. auf die tatsächliche
Geschwindigkeit hat dies durch die PLL wie schon geschrieben
überhauptkeine Auswirkungen.
Es ist zum beispiel ja auch möglich das dein PIC mit dem 48MHz Quarz gar
nicht anläuft weil der Quarz nicht schwingt - dieser bei 4MHz aber
vollkommen vernünftig läuft, du das aber gar nicht wahrnimmst weil er
einfach zu schnell ist. (Es SCHEINT halt durchgängig zu leuchten)
Immerhin würde der PIC mit deiner Einstellung ja alleine mit einer 12x
höheren Taktfrequenz laufen. Dazu sind die 18F Pics ja für Hochsprachen
wesentlich besser geeignet als die 16F. Betrifft zwar in erster Linie C,
aber auch BASIC dürfte davon profitieren.
Wenn du kein Oszi hast, aber zumindest ein Digitalmultimeter, dann
könntest du mit einem Trick versuchen herauszubekommen ob die LED
wirklich durchgängig leuchtet oder vieleicht doch sehr schnell
geschaltet wird.
Ersetze die LED durch einen geeigneten Kondensator (evtl. mal zwei drei
Pi*Daumen werte testen, da ich durch Basic die tatsächliche
Ausführungsgeschwindigkeit überhaupt nicht schätzen kann... In Assembler
wäre das ja problemlos möglich, in C ohne Kentniss des resultieren
Assemblercodes immerhin noch einigermaßen) und Messe dann ob über dem
Vorwiderstand der LED eine Spannung abfällt.
Läuft das Prog hast du eine Spannung deutlich größer 1V, je nach C auch
fast 5V, ist die einfach nur eingeschaltet fließt nach der einmaligen
Aufladung kein Strom mehr - Es fällt keine Spannung amm R ab, über dem C
liegen aber 5V DC.
Ach ja, zu deinen Fehlermeldungen beim BUILD ALL:
Es sieht so aus, als wenn durch deine Einstellungen bei diesem Befehl
MPLAB versucht deinen BASIC Code als Assemblercode zu Compilieren.
Die von dir verwendeten BASIC befehle gibt es aber gar nicht im
Befehlssatz des Prozessors. Allerdings finden die teilweise als
(Optionale) Steuerbefehle zur Steuerung von Optionen des Compilers
verwendung. Der Compiler versucht nun dies umzusetzen, das gibt aber
keinen Sinn!
Gruß
Carsten
Achja und die Pins sollten natürlich noch als digital konfiguriert
werden. Ich glaube nach einem Reset sind sie analog. Das stellst du im
ADCON1 ein.
C:
ADCON1 = 0xFF;
Ich würde dir oderso nicht empfehlen mit Basic zu beginnen. Ich würde
erst mal ein bisschen Assembler über und dann auf C umsteigen. Für C
findest du viele Codebeispiele und Libraries und auch mehr Unterstützung
bei Fragen.
Ok, dann werde ich wohl ganz umsteigen müssen. Ich hatte mir das
Material von der Arbeit ausgeliegen.
Nun ein paar Fragen, wie das genau funktioniert.
Also, ich habe das PICKIT2 (oder 3, was ist besser ?) über USB
angeschlossen, und per in-circuitprogramming in mein Teststeckboard(wo
der Rest auch ist) angeschlossen. Nun habe ich nurnoch MPLAB, und kann
darin in C schreiben. Finde Beispiele zu einfachen skripts, und schreibe
direkt in MPLAB in C. Kann das Neue Prog auf meinen PIC spielen und es
gleich laufen lassen.
Dazu verwende ich am besten noch einen 12MHz Quarz bei 22pF.
Habe ich das obenstehende richtig verstanden ?
http://de.farnell.com/microchip/pickit2promo/promo-dv164120-incl-9-pic-muster/dp/9945350
Ist das oben stehende in Ordnung ? Oder kennt jemand ncoh eine
günstigere Quelle ? Habe schon gegooglet, keine Angst. Oder hat gar
jemand noch eins zu verkaufen ? ;)
lg Tim
PS: Würde sich zudem dieses Buch noch rentieren ?
http://www.buecherbillig.de/mikrocontroller-fuer-einsteiger-p-49072.html?ref=162
Ja, eigentlich alles soweit richtig. Du kannst damit dann sogar
debuggen. D.h. wenn mal was nicht so tut wie es soll, kannst du
Breakpoints an entsprechenden Stellen setzen und Registerwerte und
Variablenwerte anschauen.
Ich würde dir dann aber doch ein PICKIT 3 empfehlen, es unterstützt mehr
Controller. Z.B. den PIC16F1937 kann man mit dem PICKIT 2 nicht
programmieren.
Pickit 3 kostet sogar nur noch 45$, die Versandkosten könnten aber etwas
hoch sein, musste mal schauen:
http://www.microchipdirect.com/ProductSearch.aspx?Keywords=PG164130
Quarz brauchste eigentlich auch erstmal nicht. Die meisten PICs haben
interne Oszillatoren. Mal schnelle mal weniger schnelle. Wenn du bei dem
18F4450 allerdings USB nutzen willst brauchst du ein 4 oder 8 oder 12MHz
Quarz.
Buch kann nicht schaden, aber ich denke im Internet findet man auch sehr
viel. Für Assembler www.sprut.de, teilweise auch C. Ich hab schon ein
paar Bücher über PICs angeschaut, aber so richtig gefallen hat mir
keins.
Also ich habe nun nochmal ein wenig nachgearbeitet, und eure Tips
versucht. Ich verwende nun den 4MHz Quarz, und habe folgendes Programm:
-----------------------------
program NWE
main:
LATA = 0
TRISA = 0
ADCON1 = 0xFF
while TRUE
LATA = not LATA
Delay_ms(1000)
wend
end.
-----------------------------
Nun blinkt er mir alle 4 Sekunden, was mich verwundert. Ich habe in
MicroBasic die 4MHz vorgegeben.(Nicht im Code)
Stelle ich da 1MHz ein, und verwende den 4er Quarz, dann blinkt er mir
jede sekunde. Habe ich irgendetwas übersehen ? Einen internen Teiler
oder sowas? ? ;)
lg Tim
Ja wahrscheinlich stellst du im MicroBasic den Maschinenzyklustakt ein.
Dieser ist 1/4 der Oszillatorfrequenz. Ein Befehlt braucht also 4
Oszillatorschwingungen.
Stell mal den Oscillator so um wie ich ihn stehen habe.
Der kann so wie du ihn stehen hast, fehler machen.
Weis auch nicht woran das liegt, habe aber schon gemerkt,
das dann das Programm nicht läuft.
Also, ich habe nun etwas mit einer LCD-Anzeige EA DIP204-4 rumgespielt,
und komme leider immer auf das selbe Ergebniss (siehe Bilder)
LCD ist angeschlossen +5V Masse und Kontrast. Reset habe ich leer
gelassen (interner Pullup 10K).
Daten Leitungen D0 - D7 an PIC LATD AD0 - AD7.
RS - RB4
RW - RB5
E - RB6
So, das Beispielprogramm:
-------------------------------------
program Lcd8_default_test
dim text as char[20]
main:
TRISB = 0 ' PORTB is output
TRISD = 0 ' PORTD is output
Lcd8_Init(LATB, LATD) ' Initialize LCD at PORTB and PORTD ---
LATB
Lcd8_Cmd(Lcd_CURSOR_OFF) ' Turn off cursor
text = "mikroElektronika"
Lcd8_Out(1, 1, text) ' Print text at LCD
end.
-------------------------------------
Ich habe es auch schon mit den PORTB,PORTA versucht. Habe es auch schon
im 4 Bit-Modus versucht. Ich komme immer auf das Ergebniss im Bild. Da
muss etwas Grundlegendes falsch sein. Anschluss Fehler ?
Hier noch das Beispiel:
LCD8 (8-bit interface) Library
mikroBasic provides a library for communication with LCDs (with HD44780
compliant controllers) through the 8-bit interface. An example of LCD
connections is given on the schematic at the bottom of this page.
For creating a custom set of LCD characters use LCD Custom Character
Tool.
Note: mikroElektronika's development system based initialization
routines are included in Code Templates.
Note: Only Lcd8_Config and Lcd8_Init routines use the RW pin (RW pin is
configured as output and set to zero). If the user needs this pin for
other purposes, it can be reconfigured after Lcd8_Config or Lcd8_Init
call.
Library Routines
Lcd8_Config
Lcd8_Init
Lcd8_Out
Lcd8_Out_Cp
Lcd8_Chr
Lcd8_Chr_Cp
Lcd8_Cmd
Lcd8_Config
Prototype sub procedure Lcd8_Config(dim byref ctrl_port as byte, dim
byref data_port as byte, dim rs, ctrl_rw, enable as byte, dim db7, db6,
db5, db4, db3, db2, db1, db0 as byte)
Returns Nothing.
Description Initializes LCD at Control port (ctrl_port) and Data port
(data_port) with pin settings you specify.
Parameters rs, ctrl_rw, enable need to be in range 0–7;
Parameters db7 .. db0 need to be a combination of values 0–7 (e.g.
3,6,5,0,7,2,1,4).
Requires Nothing.
Example Lcd8_Config(PORTC, PORTD, 0,1,2, 6,5,4,3,7,1,2,0)
Lcd8_Init
Prototype sub procedure Lcd8_Init(dim byref ctrlport, dataport as byte)
Returns Nothing.
Description Initializes LCD at Control port (ctrlport) and Data port
(dataport) with default pin settings (see the connection scheme at the
end of the chapter):
E → ctrlport.6
RS → ctrlport.4
R/W → ctrlport.5
D7 → dataport.7
D6 → dataport.6
D5 → dataport.5
D4 → dataport.4
D3 → dataport.3
D2 → dataport.2
D1 → dataport.1
D0 → dataport.0
Requires Nothing.
Example Lcd8_Init(PORTB, PORTC)
Lcd8_Out
Prototype sub procedure Lcd8_Out(dim row, col as byte, dim byref text as
char[255])
Returns Nothing.
Description Prints text on LCD at specified row and column (parameters
row and col). Both string variables and literals can be passed as text.
Requires Ports with LCD must be initialized. See Lcd8_Config or
Lcd8_Init.
Example Print “Hello!” on LCD at line 1, char 3:
Lcd8_Out(1, 3, "Hello!")
Lcd8_Out_Cp
Prototype sub procedure Lcd8_Out_Cp(dim byref text as char[255])
Returns Nothing.
Description Prints text on LCD at current cursor position. Both string
variables and literals can be passed as text.
Requires Ports with LCD must be initialized. See Lcd8_Config or
Lcd8_Init.
Example Print “Here!” at current cursor position:
Lcd8_Out_Cp("Here!")
Lcd8_Chr
Prototype sub procedure Lcd8_Chr(dim row, col, character as byte)
Returns Nothing.
Description Prints character on LCD at specified row and column
(parameters row and col). Both variables and literals can be passed as
character.
Requires Ports with LCD must be initialized. See Lcd8_Config or
Lcd8_Init.
Example Print “i” on LCD at line 2, char 3:
Lcd8_Out(2, 3, "i")
Lcd8_Chr_Cp
Prototype sub procedure Lcd8_Chr_Cp(dim character as byte)
Returns Nothing.
Description Prints character on LCD at current cursor position. Both
variables and literals can be passed as character.
Requires Ports with LCD must be initialized. See Lcd8_Config or
Lcd8_Init.
Example Print “e” at current cursor position:
Lcd8_Chr_Cp("e")
Lcd8_Cmd
Prototype sub procedure Lcd8_Cmd(dim command as byte)
Returns Nothing.
Description Sends command to LCD. You can pass one of the predefined
constants to the function. The complete list of available commands is
below.
Requires Ports with LCD must be initialized. See Lcd8_Config or
Lcd8_Init.
Example Clear LCD display:
Lcd8_Cmd(Lcd_Clear)
Available LCD Commands
LCD Command Purpose
LCD_FIRST_ROW Move cursor to 1st row
LCD_SECOND_ROW Move cursor to 2nd row
LCD_THIRD_ROW Move cursor to 3rd row
LCD_FOURTH_ROW Move cursor to 4th row
LCD_CLEAR Clear display
LCD_RETURN_HOME Return cursor to home position, returns a shifted
display to original position. Display data RAM is unaffected.
LCD_CURSOR_OFF Turn off cursor
LCD_UNDERLINE_ON Underline cursor on
LCD_BLINK_CURSOR_ON Blink cursor on
LCD_MOVE_CURSOR_LEFT Move cursor left without changing display data RAM
LCD_MOVE_CURSOR_RIGHT Move cursor right without changing display data
RAM
LCD_TURN_ON Turn LCD display on
LCD_TURN_OFF Turn LCD display off
LCD_SHIFT_LEFT Shift display left without changing display data RAM
LCD_SHIFT_RIGHT Shift display right without changing display data RAM
Library Examples
Default Pin Configuration
Use Lcd8_Init for default pin settings (see the first figure below).
program Lcd8_default_test
dim text as char[20]
main:
TRISB = 0 ' PORTB is output
TRISD = 0 ' PORTD is output
Lcd8_Init(PORTB, PORTD) ' Initialize LCD at PORTB and PORTD
Lcd8_Cmd(Lcd_CURSOR_OFF) ' Turn off cursor
text = "mikroElektronika"
Lcd8_Out(1, 1, text) ' Print text at LCD
end.
Bild - Anschlussplan.
Ich habe es auch schon so versucht, wie der Plan sagt, also mit
D4 - RD7
D5 - RD6
D6 - RD5
D7 - RD4
lg Tim
Hi,
neben einem tatsächlichen Fehler in deiner Einstellungen kann es auch
einfach sein das dein Display kein 100% zum HD44780 kompatiblen
Controller hat. Ich habe in letzter Zeit zum Beispiel viele mit
Controller KS0066 (oder kompatiblen)gehabt.
Dieser ist vom Befehlssatz und Anschluss dem HD44780 sehr ähnlich, aber
zum Beispiel unterscheidet sich das INIT dann doch. Daher wird das
Display einfach nicht Initialisiert. Ist dem so, so musst du die
Init-Schleife verändern...
Gruß
Carsten
Hey, also es steht bei mir in der Anleitung meiner Anzeige, das der
Controller fast 100% kompatible ist. Das heißt, er ist nicht 100 gleich.
Also wird es anscheinend an der initialisierung liegen. Was anderes ist
schwer denkbar. Ich habe hier im Forum noch ein bisschen gesucht, aber
leider nichts gefunden was mir hilft. So, nun frag ich mich was ich
ändern kann. Habe ich die Möglichkeit mein Display in MicroBasic anders
al die dafür forgesehene Initialisierung zu initialisieren ? Hat da
jemand erfahrung gemacht ?
Beitrag "LCD (Ks0066) initialisieren" <-- Den habe ich auch
gefunden, hat mir leider nicht soviel gebracht.
lg Tim
Habt Ihr schonmal mit der Anzeige EA DIP204-4 gemacht ?
Warum nimmst du einen so alten Compiler ? Den gibt es schon lange nicht
mehr. Wer weis was da für Fehler drin waren. Nimm den
aktuellen V4.15 und arbeite im 4-Bit Modus. den Unterschied
siehste eh kaum.
mikroe Basic Compiler ?!
Waaaaaaaaaaaaaaaaaaaaaaaaaah: Wer investiert 200$ für einen !BASIC
COMPILER!??????
Das glaub ich ja jetzt nicht ....
Da hätte man doch auch eine Hochsprach wählen können (z.B. C).
=)
>Beitrag "LCD (Ks0066) initialisieren" <-- Den habe ich auch>gefunden, hat mir leider nicht soviel gebracht.
Kein Wunder. Der Controller auf dem Display ist ein KS0073.
Oh ok, da habe ich mich aber masiv getäuscht. Was den KS0073 angeht.
Danke dir, das du mcih da rauf aufmerksam gemacht hast.
@Stefan, was meist du mit einem alten Compiler ? Ich habe MicroBasic in
der 7.0 Version und MPLAB IDE 8.56. Was meinst du nun mit dem 4.15 ?
@Lehrmann Michael, Ich habe für den Compiler keinen Cent ausgegeben, da
ich das über die Arbeit geschenkt bekommen habe. Meinst du dann, ich
solle bitte den MicroC verwenden ?
@Holger,
> Kein Wunder. Der Controller auf dem Display ist ein KS0073.
Habe ich damit überhaupt eine Changse ? - Ich habe keine Ahnung was
LCD-angeht.
lg Tim
PS: Ich würde mir ein PICKIT2 Kaufen. Rentiert sich das, und kann ich
damit in C arbeiten ? Und was für Programme brauche ich dann da ? Also
MPLAB habe ich schon ergoogelt. Was ich noch nicht rausbekommen habe,
ist ob ich in MPLAB direkt in C schreiben kann. Ich denke nein.
Also dann MicroC -> MPLAB ->PICKIT2 -> Mein PIC ?
Der Mikrobasic Compiler V7 gibt es schon lange
nicht mehr. Und wird somit auch nicht weiter
entwickelt. Der aktuelle Compiler heist, Mikrobasic pro V4.15.
Die Programme die du auf deinem Compiler geschrieben hast,
laufen auf dem neuen nicht mehr. Wenn du also weiter damit
programmieren willst, dann besorg dir die neue Version, denn
die alte Version die du hast, hatte zu viele Fehler drin.
Hier mal den Link dazu:
http://www.mikroe.com/eng/products/view/9/mikrobasic-pro-for-pic/
@Holger,
>> Kein Wunder. Der Controller auf dem Display ist ein KS0073.>Habe ich damit überhaupt eine Changse ? - Ich habe keine Ahnung was>LCD-angeht.
Sicher, du musst die Init aber zu Fuss machen. Wenn das
geklappt hat kann man mit dem KS0073 (fast) wie mit dem
HD44780 arbeiten. Die Zeilenadressen sind anders. Das Problem
mit den fertigen Routinen von deinem Basic ist halt, dass wenn
der LCD Controller ein bisschen anders arbeitet, du schlicht auf dem
Schlauch stehst. Oder kauf dir ein Display das wirklich 100%
kompatibel ist.
Tim E. schrieb:>> PS: Ich würde mir ein PICKIT2 Kaufen. Rentiert sich das, und kann ich> damit in C arbeiten ? Und was für Programme brauche ich dann da ? Also> MPLAB habe ich schon ergoogelt. Was ich noch nicht rausbekommen habe,> ist ob ich in MPLAB direkt in C schreiben kann. Ich denke nein.> Also dann MicroC -> MPLAB ->PICKIT2 -> Mein PIC ?
Pickit2 ist in Ordnung... Pickit3 wäre zwar das akutelle und unterstützt
ein paar mehr PICs, aber PK2 solte trotzdem noch die nächjsten Jahre die
gängigen Dinge beherschen. Dazu kommt noch das du mit dem PK2 notfalls
auch mal einen AVR proggen oder diesen als Schmalspur LA einsetzen
kannst.
Mit dem PK3 gehjt das nicht mehr so einfach...
Und wenn dann in fünf jahren doch mal ein nicht mehr unterstützter Pic
geproggt werden muss und deshalb ein PK3 (oder was dann aktuell ist) her
muss, dann juckt das bei einem Preis von 20Eur. auch keinen wirklich,
oder?
Entscheide selbst ob ein PK2 oder ein PK3 jetzt für dich besser ist. Ds
Risikoist in jedem Fall gering ;-)
Du kannst übrigends direkt in MPLAB auch in C Programmieren. MPLAB ist
ja als komplett GUI zum Entwickeln vorgesehen. Die einzelnen Compiler
werden einfach quasi als "Plugins" eingetragen und du merkst als
Anwender fast gar nichts davon. Du schreibst und Debuggst dann wie
gehabt in MPLAB, klickst auf "Build" und wenn du das möchtest wird dann
sofort Compiliert und abschließend direkt der Pic gebrannt! (kannst das
direkte Brennen auch deaktivieren)
Für die C18 gibt es einen guten Kostenlosen C-Compiler von Microchip
selbst. Es handelt sich dabei um die "Studentenversion" des
Proffessionellen Compilers, der auch den vollen Funktionsumfang bietet,
nur nicht ganz so effektiv mit dem Programmspeicher umgeht.
(eingeschränkte Optimierung.) Das merkst du aber nur wenn du wirklich an
der Grenze entwickelst. Fpr 99,9% der Hobby Projekte reicht der völlig
aus.
Daneben gibt es (mittlerweile ebenfalls) den Hi-Tech C compiler von dem
ebenfalls eine kostenlose Version mit geringer Optimierung angeboten
wird.
Der Vorteil hier liegt darin das es diesen Compiler ebenfalls für die
16F typen gibt, so das wenn du auch 16F typen in C Proggen willst hier
kein Unterschied in der Compilersteuerung auftritt.
Ausserdem meine ich gibt es noch "offene" Compiler, da habe ich aber
nicht den überblick. Ich verwende den C18 Compiler für 18F sowie fast
ausschließlich Assembler für die Pic16.
Im Prinzip reduziert sich deine entwicklungsumgebung auf:
MPLAB mit fast beliebigen Compiler oder Assembler-> PICKIT2/3->PIC!
Gruß
Carsten
P.S: Wenn es für dich selbst auch vorstellbar ist in C zu proggen, dann
würde ich auf jeden Fall diesen Weg gehen und Basic links liegen lassen.
Insbesondere wenn du eh eine neue Basic Version teuer kaufen müsstest.
Das hat auf jeden Fall mehr Zukunft, die Unterstützung / Beispiele sind
viel Vielfältiger/Besser und im Proffessionellen Bereich (Beruf) gibt es
Basic eingendlich überhaupt nicht.
Falls du aber der Meinung bist, Basic reicht dir und C sei -warum auch
immer- nicht dein Ding, dann kannst du natürlich auch bei Basic bleiben
wenn du damit auch ans Ziel kommst...
P.P.S: Für die USB Pics gibt es übrigends auch einen USB Bootloader von
Microchip! Wenn du diesen einmal in deinen PIC brennst, dann kannst du
auch ohne jegliche spezielle HArdware entwickeln. Solange kein PK
vorhanden ist könntest du so beispielsweise dein 18F4550 einmal mit
diesem BOOTLOADER versehen (das geht ja mit PS+) und dann immer direkt
über USB den neuen Code einspielen.
Da gibt es einige Artikel und auch Dokumente in diversen Foren und bei
Microchip dazu. Hier gibt es auch einen Artikel wo das zumindest
angeschnitten wurde.
http://www.mikrocontroller.net/articles/PIC18f4550_Experimentier_Platine
Evtl. macht es ja auch Sinn für dich die SchaltungTEILWEISE auf LR
nachzubauen und dann als Ausgangspunkt für eigene Experimente zu
sehen...
So, jetzt nochmal:
Gruß
Carsten
Also DANKE an euch alle, das Ihr mir soviele Detailierte Infos gegeben
habt. Nun habe ich etwas die übersicht über die Situation.
Also ich denke, es ist am geschicktesten mit MPLAB mit C zu holen, und
ein PIL LIT. Welches, das muss ich noch sehen, wo sich da die Angebote
treffen.
Wie Ihr schon schreibt, denke ich auch das es mehr Hilfe in C geben wird
als in Basic. Ich habe nun 1 Jahr in AutoIT programmiert (Basic ählich)
und etwas die Grundlagen verstanden. Ich denke, das ich mich da in C
einarbeiten werde. Und so dumm meine Fragen sind Hilfe bekomme.(
Natürlich werde ich erst die Suche bemüher ;) )
Ich bleibe auch bei der Anzeige, und versuche es dann erst mit dieser,
auch wenn ich die gesammte Initialisierung "per Hand" machen muss ;)
Das mit der USB - Idee ist natürlich auch sehr angenehm, doch möchte ich
erstmal die Grundlagen lernen, bevor ich damit anfange.
Danke auch für die Links. Ich habe mir die Seiten angesehen, und bin auf
den oben genannten Entschluss gekommen.
So, dann möchte ich mich melden sobal mein PICKIT da ist ;)
lg Tim
PS: Dürfte ich denn fragen, ob, und wenn ja was Ihr so habt und
verwendet an Soft- und Hardware ?