Forum Krótkofalarskie PKI

PIC16F627A i wyświetlacz LCD - problem
T#461440
Facebook
sq3mve
poziom 6

Użytkownik
QTH: JO82MB
Ilość edycji wpisu: 1
#2458128 24.08.2017 20:30:54
Witam

Od niedawna bawię się mikroprocesorami PIC.

Obecnie próbuję zmigrować jeden projekt z PIC16F877A na PIC16F627A.
PIC16F877A z zewnętrznym oscylatorem 10 MHz.
PIC16F627A z wewnętrznym oscylatorem 4 MHz.

No i wyskoczył problem z obsługą wyświetlacza LCD 2x16.

Za chiny nie mogę zmusić PIC16F627A do wyświetlenia tekstu na wyświetlaczu. :-(

Korzystam zarówno z własnej biblioteki obsługującej LCD jak i pobranej ze strony Microchip'a.

Porty są odpowiednio skonfigurowane i podłączone (PIC16F627A):
RS -> A6
RW -> masa
E -> A7
D4-D7 -> A0-A3

Ma ktoś z Was doświadczenie w tej materii i mógłby mi podpowiedzieć jak to ugryźć?

<edit>
Zapomniałem dodać, że obie biblioteki na PIC16F877A nie mają problemu z poprawnym wyświetlaniem tekstów.
</edit>


Pozdrawiam
wpis edytowany 24.08.2017 20:32:45



Mariusz SQ3MVE
http://sq3mve.marph.pl
-----------------------------------
Dobrze jest gdy satysfakcja mówiącego nie przewyższa znacznie satysfakcji słuchających.
Jerzy Bralczyk
-----------------------------------
Najlepsze kursy on-line. 30 zł na start :-)
sq6ade
moc !!!
moc !!!
Użytkownik
QTH: Wrocław (Breslau) Party-n
#2458159 24.08.2017 21:31:24
Może przez to nieszczęsne ignorowanie flagi BUSY jak RW ustawione tylko na zapis.



"Panta rej" jak mawiał Demokles z Akwirynu

SR6MA w mobilku 145.350 home


SP6LTD
poziom 2
Użytkownik
QTH: JO81LC
#2458172 24.08.2017 21:58:20
    sq6ade pisze:

    Może przez to nieszczęsne ignorowanie flagi BUSY jak RW ustawione tylko na zapis.

Raczej nieprawdopodobne przy identycznym sofcie i zwolnionym zegarze.
sq3mve
poziom 6

Użytkownik
QTH: JO82MB
#2458250 25.08.2017 08:49:30
Witam

    sq6ade pisze:

    Może przez to nieszczęsne ignorowanie flagi BUSY jak RW ustawione tylko na zapis.


Soft jest oparty na opóźnieniach czasowych i nie jest brana pod uwagę flaga BUSY.

I tak na marginesie, dla PIC16F627A mam stosowne ustawienia informujące o zegarze procka:

#define _XTAL_FREQ 4000000

Więc teoretycznie czasy opóźnień powinny być wyliczane prawidłowo.

Sprawdzę co da ich zwiększenie...

Pozdrawiam



Mariusz SQ3MVE
http://sq3mve.marph.pl
-----------------------------------
Dobrze jest gdy satysfakcja mówiącego nie przewyższa znacznie satysfakcji słuchających.
Jerzy Bralczyk
-----------------------------------
Najlepsze kursy on-line. 30 zł na start :-)
sq6ade
moc !!!
moc !!!
Użytkownik
QTH: Wrocław (Breslau) Party-n
#2458253 25.08.2017 09:18:20
Nie znam dobrze picków ale widzę że porty mogą mieć różne funkcje w zależności od ustawionych rejestrów sterujących.
Różni się to między tymi dwoma układami jeśli chodzi o PORTA.
"SUMMARY OF REGISTERS ASSOCIATED WITH PORTA"



"Panta rej" jak mawiał Demokles z Akwirynu

SR6MA w mobilku 145.350 home


sp9uxy
poziom najwyższy i najjaśniejszy :-)
Użytkownik
QTH: Gliwice
#2458254 25.08.2017 09:19:56
Obsługa LCD jest napisana w C czy w asemblerze?
sp9uxy
poziom najwyższy i najjaśniejszy :-)
Użytkownik
QTH: Gliwice
#2458257 25.08.2017 09:29:40
    sq6ade pisze:

    Nie znam dobrze picków


Nie znam się ale wypowiem się. Co w tym dziwnego że bity w PORTA
mogą mieć różne funkcje?

W 877A nie ma bitów 6 i 7 w PORTA.
sq6ade
moc !!!
moc !!!
Użytkownik
QTH: Wrocław (Breslau) Party-n
#2458261 25.08.2017 09:48:27
Skoro robi migrację to raczej oczywiste że nie w asm. Ale to wiedzą ci co coś programują . Spamerzy raczej nie.



"Panta rej" jak mawiał Demokles z Akwirynu

SR6MA w mobilku 145.350 home


sp9uxy
poziom najwyższy i najjaśniejszy :-)
Użytkownik
QTH: Gliwice
Ilość edycji wpisu: 1
#2458265 25.08.2017 09:56:56
    sq6ade pisze:

    Skoro robi migrację to raczej oczywiste że nie w asm. Ale to wiedzą ci co coś programują . Spamerzy raczej nie.


No właśnie ty coś tam programujesz i tak to wygląda.

Znowu udowadniasz że : nie znasz się ale wypowiesz się. Twój spam już osiągną poziom ponad 11k.

Migracje można robić w asemblerze i w C. Jak byś znał C to byś nie spamował.
wpis edytowany 25.08.2017 09:57:31
sq6ade
moc !!!
moc !!!
Użytkownik
QTH: Wrocław (Breslau) Party-n
#2458266 25.08.2017 10:07:15
No cóż - można i kod wynikowy HEX dekompilować do asm migrować i kompilować. Nikt nie zabrania tarzania się w pokrzywach.
Pomóż koledze z LCD a swoje charakterystyczne złośliwe docinki zachowaj dla siebie.

http://sp7pki.iq24.pl/default.asp?grupa=3538&temat=438104



"Panta rej" jak mawiał Demokles z Akwirynu

SR6MA w mobilku 145.350 home


sp9uxy
poziom najwyższy i najjaśniejszy :-)
Użytkownik
QTH: Gliwice
#2458270 25.08.2017 10:09:55
    sq6ade pisze:

    No cóż - można i kod wynikowy HEX dekompilować do asm migrować i kompilować. Nikt nie zabrania tarzania się w pokrzywach.
    Pomóż koledze z LCD a swoje charakterystyczne złośliwe docinki zachowaj dla siebie.

    http://sp7pki.iq24.pl/default.asp?grupa=3538&temat=438104


Złośliwe docinki jak zwykle od ciebie jako pierwsze a dalej to tylko pokłosie.
wojrum
Użytkownik
QTH: Biłgoraj
Ilość edycji wpisu: 2
#2458277 25.08.2017 10:36:06
Może problem występować przez nieprawidłowe zainicjalizowanie portu - chodzi o współdzielenie pinów jako analogowych(komparator analogowy-ANx) lub cyfrowych (PORTAx).
Tu poniższy kawałek w asemblerze - inicjowanie jako cyfrowy:
MOVLW 0x07 ;Turn comparators off and
MOVWF CMCON ;enable pins for I/O
;functions

P.S.
Pisząc po ludzku(w C):
CMCON=0x07;

Sprawdź czy nie ma w kodzie już podobnej inicjalizacji.
wpis edytowany 25.08.2017 12:32:30



73!
Wojtek SP8XW
sp9uxy
poziom najwyższy i najjaśniejszy :-)
Użytkownik
QTH: Gliwice
Ilość edycji wpisu: 1
#2458314 25.08.2017 12:44:34
    wojrum pisze:

    Może problem występować przez nieprawidłowe zainicjalizowanie portu - chodzi o współdzielenie pinów jako analogowych(komparator analogowy-ANx) lub cyfrowych (PORTAx).
    Tu poniższy kawałek w asemblerze - inicjowanie jako cyfrowy:
    MOVLW 0x07 ;Turn comparators off and
    MOVWF CMCON ;enable pins for I/O
    ;functions

    P.S.
    Pisząc po ludzku(w C):
    CMCON=0x07;

    Sprawdź czy nie ma w kodzie już podobnej inicjalizacji.


Używane przez kolegę piny nie mogą być użyte jako ADC.

Ale mogą być : RA6 dwukierunkowym I/O portem, wyjściem oscylatora kwarcowego,
wyjściem zegara , RA7 dwukierunkowym I/O portem, wejściem oscylatora kwarcowego,
wejściem zegara.
wpis edytowany 25.08.2017 12:50:59
wojrum
Użytkownik
QTH: Biłgoraj
#2458324 25.08.2017 13:34:26
W 877A bity w CMCON są dafaultowo ustawione na wartość 7 - I/O, w 827A na zero - wejścia analogowego komparatora.
Poza tym w 877A defaultowo piny są ustawione w ADCON1 jako wejścia ADC, w 827A nie występuje.



73!
Wojtek SP8XW
wojrum
Użytkownik
QTH: Biłgoraj
#2458338 25.08.2017 13:50:16
    Używane przez kolegę piny nie mogą być użyte jako ADC.

    Ale mogą być : RA6 dwukierunkowym I/O portem, wyjściem oscylatora kwarcowego,
    wyjściem zegara , RA7 dwukierunkowym I/O portem, wejściem oscylatora kwarcowego,
    wejściem zegara.


Oczywiście ten wypadek wystąpi jak złe są ustawienia oscylatora w bitach konfiguracyjnych.



73!
Wojtek SP8XW
sq3mve
poziom 6

Użytkownik
QTH: JO82MB
#2458356 25.08.2017 14:29:16
Witam

Przypomnę, że problem dotyczy PIC16F627A :-)
Piszę w C, tak dla wyjaśnienia.
Asembler to wyższy stopień wtajemniczenia :-)
Wezmę się za niego jak już dobrze opanuję programowanie picków w C :-)

Porty mam skonfigurowane jako cyfrowe (CMCON=0x07) ;-)

A problem już rozwiązałem, przynajmniej częściowo.
Pomogło wydłużenie kilku opóźnień.

Muszę jeszcze to dokładnie przećwiczyć, bo w jakichś 10% przypadków, po włączeniu zasilania, wyświetlacz się nie inicjalizuje. :-(

Może wystarczy wydłużyć opóźnienie przeznaczone na ustabilizowanie napięcia...

Pozdrawiam



Mariusz SQ3MVE
http://sq3mve.marph.pl
-----------------------------------
Dobrze jest gdy satysfakcja mówiącego nie przewyższa znacznie satysfakcji słuchających.
Jerzy Bralczyk
-----------------------------------
Najlepsze kursy on-line. 30 zł na start :-)
sq6ade
moc !!!
moc !!!
Użytkownik
QTH: Wrocław (Breslau) Party-n
#2458357 25.08.2017 14:32:55
Poszukaj biblioteki z obsługą r/w. Dodanie opóźnień przed i po impulsie E też nie zawadzi.



"Panta rej" jak mawiał Demokles z Akwirynu

SR6MA w mobilku 145.350 home


sp9uxy
poziom najwyższy i najjaśniejszy :-)
Użytkownik
QTH: Gliwice
#2458410 25.08.2017 16:24:27
    sq6ade pisze:

    Poszukaj biblioteki z obsługą r/w. Dodanie opóźnień przed i po impulsie E też nie zawadzi.


Po co biblioteka r/w? Tak aby tylko poszukać?
sp9uxy
poziom najwyższy i najjaśniejszy :-)
Użytkownik
QTH: Gliwice
#2458411 25.08.2017 16:28:34
    sq3mve pisze:

    Witam

    Przypomnę, że problem dotyczy PIC16F627A :-)
    Piszę w C, tak dla wyjaśnienia.
    Asembler to wyższy stopień wtajemniczenia :-)
    Wezmę się za niego jak już dobrze opanuję programowanie picków w C :-)

    Porty mam skonfigurowane jako cyfrowe (CMCON=0x07) ;-)

    A problem już rozwiązałem, przynajmniej częściowo.
    Pomogło wydłużenie kilku opóźnień.

    Muszę jeszcze to dokładnie przećwiczyć, bo w jakichś 10% przypadków, po włączeniu zasilania, wyświetlacz się nie inicjalizuje. :-(

    Może wystarczy wydłużyć opóźnienie przeznaczone na ustabilizowanie napięcia...

    Pozdrawiam


Kolejność nauki powinna właśnie rozpoczynać się od asemblera, poznajesz wówczas
mapę pamięci uP, rejestry, przerwania.
Potem C, oczywiście pisząc w C często warto dla większej wydajności używać
wstawek asemblerowych.

A próbowałeś czy z innym egzemplarzem LCD są też problemy?
wojrum
Użytkownik
QTH: Biłgoraj
#2458416 25.08.2017 16:45:37
    sq3mve pisze:

    Witam

    Przypomnę, że problem dotyczy PIC16F627A :-)
    Piszę w C, tak dla wyjaśnienia.
    Asembler to wyższy stopień wtajemniczenia :-)
    Wezmę się za niego jak już dobrze opanuję programowanie picków w C :-)

    Porty mam skonfigurowane jako cyfrowe (CMCON=0x07) ;-)

    A problem już rozwiązałem, przynajmniej częściowo.
    Pomogło wydłużenie kilku opóźnień.

    Muszę jeszcze to dokładnie przećwiczyć, bo w jakichś 10% przypadków, po włączeniu zasilania, wyświetlacz się nie inicjalizuje. :-(

    Może wystarczy wydłużyć opóźnienie przeznaczone na ustabilizowanie napięcia...

    Pozdrawiam



Nie wiem w jakim stopniu kolega ma opanowaną technikę mikroprocesorową oraz ten wyświetlacz ale podzielę się wiedzą:
Czepiając się programowania pic-a to są bity konfiguracyjne do odpowiedniego startu:
1. PWRTE - gdy jest na 0 to zadziała opóźnienie 72ms po włączeniu zasilania pic-a,
2. BOREN - gdy jest na 1 to zadziała opóźnienie (gdy PWRTE=0) 72ms od czasu gdy napięcie zasilania przekroczy odpowiednią do pracy wartość.
Bity te umożliwiają reset układu po włączeniu zasilania bez stosowania elementów RC na wejściu MCLR, czy także jego wyeliminowaniu.

Jeśli chodzi o wyświetlacz to należy dawać opóźnienia pomiędzy instrukcjami w sekwencji inicjalizującej wyświetlacz (chociaż ja zrobiłem sprawdzając flage BUSY wyświetlacza i działało) które są podane w dokumentacji. Wyświetlacz wyrabiał się na 4MIPS-ach pic-a bez problemu.



73!
Wojtek SP8XW
Aby pisać na forum musisz się zalogować !!!
załóż własne forum · korzystasz z forum? wesprzyj projekt - postaw kawę! · rss