Forum: Mikrocontroller und Digitale Elektronik PIC4550 - Anfänger Problem


von Patrick E. (f4550tim)


Angehängte Dateien:

Lesenswert?

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)

von Patrick E. (f4550tim)


Angehängte Dateien:

Lesenswert?

Sorry, konnte das 2 Bild nicht noch nachträglich einfügen ;)

von Carsten S. (dg3ycs)


Lesenswert?

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!

von Lehrmann M. (ubimbo)


Lesenswert?

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

von Carsten S. (dg3ycs)


Lesenswert?

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

von Martin S. (drunkenmunky)


Lesenswert?

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.

von Patrick E. (f4550tim)


Lesenswert?

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

von Martin S. (drunkenmunky)


Lesenswert?

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.

von Patrick E. (f4550tim)


Lesenswert?

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

von Martin S. (drunkenmunky)


Lesenswert?

Ja wahrscheinlich stellst du im MicroBasic den Maschinenzyklustakt ein. 
Dieser ist 1/4 der Oszillatorfrequenz. Ein Befehlt braucht also 4 
Oszillatorschwingungen.

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Du must den Postscaler umstellen.
Siehe Anhang.

von Patrick E. (f4550tim)


Lesenswert?

Danke, genau das war es ;) Nun geht es.

von Stefan (Gast)


Lesenswert?

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.

von Patrick E. (f4550tim)


Lesenswert?

Hast du schon Erfahrung mit einer LCD -Anzeige gemacht ?

lg Tim

von Stefan (Gast)


Lesenswert?

ja

von Patrick E. (f4550tim)


Angehängte Dateien:

Lesenswert?

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

von Stefan (Gast)


Lesenswert?

Die LCD8 Routine gibt es im aktuellen Compiler
nicht mehr. Nimm doch die 4Bit Routine, dann geht es auch.

von Carsten S. (dg3ycs)


Lesenswert?

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

von Patrick E. (f4550tim)


Lesenswert?

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 ?

von Stefan (Gast)


Lesenswert?

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.

von Lehrmann M. (ubimbo)


Lesenswert?

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).

=)

von holger (Gast)


Lesenswert?

>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.

von Patrick E. (f4550tim)


Lesenswert?

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 ?

von Stefan (Gast)


Lesenswert?

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/

von holger (Gast)


Lesenswert?

@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.

von Carsten S. (dg3ycs)


Lesenswert?

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

von Patrick E. (f4550tim)


Lesenswert?

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 ?

von Juppi J. (juppiii)


Lesenswert?

Tim E. schrieb:
> PICKIT

Welchen kauft du 2 oder 3

von Patrick E. (f4550tim)


Lesenswert?

Ich denke 2 ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.