Forum: Mikrocontroller und Digitale Elektronik PIC - zu wenig spannung oder initalisierungsproblem?


von jibbel (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe ein 4x40 zeichen display, und habe das auch schon ueber einen 
PIC16f690 erfolgreich initalisiert, und auch schon zeichen ausgegeben.
Nun will ich das Teil auf einem dsPIC33FJ128MC710 betreiben.
Also einfach den code von asm auf c umgeschrieben und von 8-bit auf 
4-bit.
Dann hab ich das Display angesteckt, und es hat sich nichts getan!

Aber nun zu meinem eigentlichen Problem:
Der PIC16f690 arbeitet mit 5V und kann somit das Display ansteuern. Der 
dsPIC arbeitet mit 3,6V und erreicht somit das VHI nicht!

Ich habe schon mittels PUll-UP widerstaenden versucht, hier ein bissl zu 
schummeln, aber da geht nichts.

Ohne Display erhallte ich die +5V bei logisch 1, aber wenn das display 
drann haengt sacken die auf 3,3 zusammen.

Fuer mich gibt es hier 2 moegliche fehler:
1. Ich hab mich beim umschreiben von asm auf c und von 8 auf 4 bit 
uebernommen, und einen scheiss zusammengebaut. (kann man im dateianhang 
ueberpruefen!)

2. die Vhi wird nicht erreicht, und deshalb bekommt das display auch 
keine signale. (wird warscheinlich zutreffen)


Meine loesungsversuche:
Mit transistorschaltungen geht nix, weil dann die maximale flankenzeit 
von 25ns ueberschritten wird. (das beste was ich gefunden habe waren 
109ns flankenzeit)

Geht das:???
Der einzige weg, welchen ich jetzt noch habe, wird wohl ein i2c 
treiberbaustein sein! ich hab vom PCF8574 bereits hier im forum gelesen.

Im datenblatt sehe ich, dass er bis 7V betrieben werden kann, und 
maximal 100mA ausgeben kann. Da er hier so oft in kombi mit einem 
display verwendet wird, nehme ich mal an, dass die flankenzeit passen.


Ich habe auch bereits diverse headerfiles ausprobiert, aber keines 
scheint so wirklich funktioniert zu haben, diverse asm und c files habe 
ich auch schon ausprobiert. Die meisten habe ich vorher noch an meine 
pin-belegung angepasst und fuer 2 controller umgeschrieben, aber leider 
erfolglos.


Im anhang sind meine selbst geschriebenen header datein. Waere toll, 
wenn die mal einer ausprobieren kann.

Kennt jemand funktionierende header files fuer c und einen PIC!!

mfg jibbel

von jibbel (Gast)


Angehängte Dateien:

Lesenswert?

hier noch das c-file

von Michael H. (morph1)


Lesenswert?

schon probiert den ausgangsport auf open-collector zu schalten? vorher 
nutzen dir die PU überhaut nichts :)

dann natürlich die signale invertieren

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Ich schlage erst mal vor, zu prüfen ob der dsPIC33 5v-kompatible 
Eingänge hat.
Dann geht man in den Gedanken auf, die Datenleitungen mittels Pull-Up an 
5V zu schalten.
Will man nun eine 0 ausgeben, dann schreibt man eine 0 in das LAT-Bit 
(das kann da immer drin stehen bleiben) und aktiviert im TRIS-Bit den 
Ausgang.
Will man eine 1 ausgeben, schaltet man das TRIS-Bit auf Eingang.
Also schreibt man statt in das Port-Register in das TRIS-Register...

von jibbel (Gast)


Lesenswert?

odcd ist im headefile definiert, und wird im main(void) teil aktiviert!

die ausgaenge habe ich mit 220 bis 330 ohm widerstaende auf +5V 
gehaengt!

Der PIC hat 5V kompatikble ein/ausgaenge. Diese verwende ich auch.

Also ich hab im debugmodus die pins mal wahlweise von 0 auf logisch 1 
gezogen, und die sind nicht invertiert.

ist logisch 0 im LAT, sind ca 0- 0.9V am ausgang.
ist logisch 1 im LAT sind ca 3,3 bis 5V am ausgang. (je nachdem, ob das 
display dran haengt oder nicht!)

TRIS ist auf 0, und wird nur beim lesen vom busy bit auf 1 gesetzt!

jibbel

von holger (Gast)


Lesenswert?

>die ausgaenge habe ich mit 220 bis 330 ohm widerstaende auf +5V
>gehaengt!

Sportlich, sportlich. 20mA bei Low Pegel.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

jibbel schrieb:
> TRIS ist auf 0, und wird nur beim lesen vom busy bit auf 1 gesetzt!

Und hier zeigt sich, daß Du mich NICHT verstanden hast !

von jibbel (Gast)


Lesenswert?

Also, derzeitiger stand:

hab meinen treiber auf 8-bit umgeschrieben, und siehe da, das display 
funktioniert!

2. wegen VDD
Im original datenblatt vom display steht, ich brauche 5V VDD. die Vhi 
spez ist 0,7 * Vdd also 3,5V welche ich mit den 3.3 V ausgang nie 
erreiche.

Im datenblatt von sitronix steht, dass VDD zwischen 2.2V und 7 Varrieren 
kann. Also hab ich mal Vdd auf 4,5V runtergedreht, und die pull-ups 
entfernt, und siehe da, es funktioniert!!!

Ich glaube, ich werde den 4-bit modus sein lassen, und mir einfach einen 
16-bit I/O I2C expander kaufen.

busy flag check funktioniert einwandfrei, und das gesammte display 2 * 
80 zeichen ist unter 500ms aufgebaut!

trotzdem danke fuer eure hilfe!!!

Wo soll ich die header datein hochladen??
Sie sind fuer folgendes display geschrieben:
ANAG VISION AV4040 (Blauer hintergrund, 4 zeilen 40 zeichen)

die headerfiles werde ich in den naechsten tagen noch um die befehle 
lcdpos und getac erweitern.

jibbel

von jibbel (Gast)


Lesenswert?

also ich interpretiere dieses Datenbaltt :
http://ww1.microchip.com/downloads/en/DeviceDoc/70193C.pdf
so:
0 im jeweiligen TRIS register schaltet den pin als ausgang
1 im jeweiligen TRIS register schaltet den pin als eingang

zumindest habe ich das so in meinen headerfiles, und anscheinend ist es 
richtig, weil sonnst wuerde die Busy flag abfrage nicht funktionieren, 
und ich wuerde nicht die aktuelle position vom Curser im watch fenster 
sehen.


trotzdem danke fuer eure hilfe bis zuletzt!

jibbel

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

1. Ich finde I2c-Portexpander zu langsam, ich nehme lieber SPI wenn es 
auf der Platine bleibt. Ich habe letztens die MCP23s17 verwendet. Sehr 
geil.
Aber dafür brauchst Du einen Level-Shifter!

2. Ich taste das Busy-Flag nicht ab und setze stattdessen feste 
Zeitschleifen ein.

3. Mit der Nutzung des TRIS-Bits meine ich nicht die Abfrage des 
Busy-Buts, sondern das "altbekannte" Umschalten eines Pins von Ein- auf 
Ausgang, um einen Open-Collector-Ausgang zu simulieren, so daß man 
leicht mit einem 3,3V-Ausgang einen 5V-Eingang ansteuern kann.

von jibbel (Gast)


Lesenswert?

Also ist SPI deiner meinung nach besser fuer dieses Display??

es sind immerhin 160 Zeichen!

Wegen tris:
Also ich hatte bereits diese open collektor sache probiert:
ich hatte
Tris auf 0
ODCD auf 1
und lat oder POrt auf 1


und am ausgang hatte ich ohne last 5V
mit last 3,3V

auf jeden fall wenn ich das naechste mal mit pull-up arbeite werde ich 
an deinen rat denken, wenns mal nicht geht!

Was ist denn der grosse unterschied zwischen SPI und I2C??


Ich hab das busyflag als letztes programmiert. Vorher hatte ich feste 
zeiten, und da konnte man mit freiem auge erkennen, wie das display 
aufgebaut wird.

Jetzt hab ich die header datei nochmal getuned. fast alle verzoegerungen 
sind drausen, und bei der initalisierung bin ich auf das absolute 
minimum runter!

das display ist innerhalb von 100mS fertig aufgebaut!!!

jibbel!

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.