16F677 update auf PIC 18F452 Problem
Montag, 21. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  CCS Compiler  |  LCD (CCS)  |  16F677 update auf PIC 18F452 Problem « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: 16F677 update auf PIC 18F452 Problem  (Gelesen 3525 mal)
 
Holgus
Newbie
*
Offline Offline

Beiträge: 27


Profil anzeigen
« am: August 18, 2006, 09:52:24 »

Hallo,
ich habe ein Problem mit einem Grafik Display 64x128 Pixel.
Habe ein Programm geschrieben und dieses Fehlerfrei auf einem 16F677 zum laufen bekommen. Musste aber aus Speichermangel auf einen 18F452 umsteigen.

Das Display zeigt beim 18F452 die Grafiken mit ganz vielen Pixelfehlern, man kann nur noch erahnen, was es darstellen soll.

Ich habe das Forum schon durchsucht aber leider nix passendes Gefunden.
Als Datenport verwende ich Port D, ich finde aber in dem CCSC Drivers HDM64GS12.c keine Möglichkeit die Adresse auf 0xF83 einzustellen, außerdem geht das Display ja so halb  Weinen sind
ja nur Unmengen von Pixelfehlern.
Hat jemand noch ein paar Ideeen für mich, woran das liegen kann???

Mein CCS Compiler hat die NR PCH 3.222
Vielen Dank für eure Hilfe!!!

Gruß Holgus

Hier den Code mit dem ich diesen Fehler bekomme:
Code:
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
//#include <18f452.h>
//#fuses NOWDT,HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)    //Die Taktfrequenz beträgt 20MHz

#include <HDM64GS12.c>
#include <graphics.c>

void main (void)
{
 setup_adc_ports (NO_ANALOGS);   // Port A als Digitalen Port nutzen
 set_tris_a(0b111111);           // Port wird initialisiert 1=Eingang 0=Ausgang
 set_tris_b(0b00000000);         // Port wird initialisiert 1=Eingang 0=Ausgang
 set_tris_c(0b11111111);         // Port wird initialisiert 1=Eingang 0=Ausgang
 set_tris_d(0b11111111);         // Port wird initialisiert 1=Eingang 0=Ausgang
 set_tris_e(0b111);

 glcd_init(on);

 delay_ms(2000);

 glcd_rect(0, 0, 60,12, ON, ON);
 
 delay_ms(2000);

 glcd_line(42,16,42,46,ON);
}
Gespeichert
Holgus
Newbie
*
Offline Offline

Beiträge: 27


Profil anzeigen
« Antworten #1 am: August 21, 2006, 08:54:29 »

Hallo!
Habe bei den beiden Funktionen:
void glcd_writeByte(int1 side, BYTE data)
{...}
und
BYTE glcd_readByte(int1 side)
{...}
aus dem Driver HDM64GS12.c noch jeweils zwischen den Ereignissen delay_cycles(5); eingefügt.
Danach hatte ich mit dem PIC 18F Typen keine Pixelfehler mehr auf meinem Display.Es handelt sich um ein DIP LCD-Grafik Modul 128x64Pixel von Electronic Assembly.

Fehler ist somit beseitigt, aber kann mir jemand eine Begründung dazu nennen? Beide PIC´s laufen doch mit bzw. in der gleichen Schaltung und mit dem gleichen Quarz.

Vielen Dank
Holgus
Gespeichert
Bernd
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 3815



Profil anzeigen
« Antworten #2 am: August 21, 2006, 18:44:18 »

Zitat
Fehler ist somit beseitigt, aber kann mir jemand eine Begründung dazu nennen? Beide PIC´s laufen doch mit bzw. in der gleichen Schaltung und mit dem gleichen Quarz.

Die PIC18 besitzen gegenüber den PIC16 einen deutlich erweiterten und effektiveren Befehlssatz. Ein C-Statement kann also evtl. auf einem PIC18 schneller ausgeführt werden als auf einem PIC16 (bei identischer Taktfrequenz). Damit ist die Ansteuerung unter Umständen zu schnell für ein gegebenes LCD.

Der CCS setzt in seiner Standardeinstellung z.B. für jeden Input- oder Output-Befehl zunächst das TRIS-Register und erst dann das Portregister. Bei einem PIC16 sind dafür zwei zusätzlich Befehle für die Bankumschaltung nötig. Da alle SFRs bei den PIC18 im Access-RAM liegen, entfällt hier die Bankauswahl und die Abarbeitung ist quasi "doppelt so schnell".


Viele Grüße

Bernd
Gespeichert

Holgus
Newbie
*
Offline Offline

Beiträge: 27


Profil anzeigen
« Antworten #3 am: August 25, 2006, 06:39:34 »

Vielen Dank für die Informationen!
Nach eineigen Tagen Fehlerfreien lauf des Displays und der guten Begründung,
kann ich sicherlich davon ausgehen, das der Fehler damit beseitigt ist.
Vielen Dank nochmals
Holgus
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.039 Sekunden mit 19 Zugriffen.
 
Top! Top!