Problem med flyttning av program i C *LÖST*

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
SeniorLemuren
Inlägg: 8407
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Problem med flyttning av program i C

Inlägg av SeniorLemuren »

TomasL skrev:Nu vet jag iofs inte hur Hitec-C funkar.
I alla andra kompilatorer, brukar man inkludera en processorheader.
Typ:

Kod: Markera allt

#include "p16f6xx.h"
Eller något liknande.

Vad finns i LCD.h?
Hi-tech fixar detta via htcc.h

Kod: Markera allt

/*	Ver 1.0
 *	LCD interface header file
 *	See lcd.c Ver 1.0 for more info
 */

/* write a byte to the LCD in 4 bit mode */

extern void lcd_write(unsigned char);

extern void lcd_left(void);
extern void lcd_right(void);
extern void lcd_cur_off(void);

/* Clear and home the LCD */

extern void lcd_clear(void);

/* write a string of characters to the LCD */

extern void lcd_puts(const char * s);

/* Go to the specified position */

extern void lcd_goto(unsigned char pos);
	
/* intialize the LCD - call before anything else */

extern void lcd_init(void);

extern void lcd_putch(char);


/*	Set the cursor position */

#define	lcd_cursor(x)	lcd_write(((x)&0x7F)|0x80)
ElectricNooB
Inlägg: 600
Blev medlem: 26 juli 2011, 20:58:06

Re: Problem med flyttning av program i C

Inlägg av ElectricNooB »

"Jag använder RA1 till RS och RA0 till E. RW är kopplad låg på kortet."

Kod: Markera allt

#define   LCD_RS RB4
#define   LCD_RW RB6
#define   LCD_EN RB7
Är jag bara dum eller käns det där fel? :oops:
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46933
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Problem med flyttning av program i C

Inlägg av TomasL »

Du läste på fel ställe

Kod: Markera allt

#define   LCD_RS RA1
//#define   LCD_RW RB6
#define LCD_EN RA0
Senioren, posta lcd_init's assemblerlistning.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Problem med flyttning av program i C

Inlägg av jesse »

TomasL skrev:
SeniorLemuren skrev:Ändrade till 50 mS i början av strulet. 5 mS var en felskrivning.
Verifierat assemblerkoden? Nej, hoppas slippa.
Tror inte du har några alternativ. Det kan vara så att kompilatorn optimerar bort viktiga saker.
Ytterst osannolikt att kompilatorn skulle ställa till det. Det är ju vanliga självklara funktioner och bitbanging på I/O - Om det inte fungerar skulle man ju inte kunna använda C på microcontrollers överhuvudtaget. När det gäller I/O så behandlas de alltid som "volatile", dvs. det skrivs och läses sekventiellt allt eftersom koden utförs och kan aldrig optimeras bort. Det övriga är ju ren logik, och det får givetvis inte heller påverkas av optimering.
Användarvisningsbild
SeniorLemuren
Inlägg: 8407
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Problem med flyttning av program i C

Inlägg av SeniorLemuren »

Ok, nu har jag kopplat upp en 16 x 2 raders display på samma PIC som jag försöker köra 16 x 1. Den funkar utan problem.

Den enda skillnaden som borde vara är raden "set interface length" i init. Displayerna är inkopplade på samma vis förutom benen på de oanvända data in (D0-D3 är jordade på den LCD som inte funkar.
Jag har provat att ange både en och 2 raders LCD i interface length.

Dom åker nu i papperskorgen. 2-radiga skall beställas. De enradiga beställdes av misstag för en tid sedan och jag tänkte göra nytta av dom, men nu skiter jag i det.

Kod: Markera allt

	char init_value;
	init_value = 0x30;
	TRISB= 0B00000000;	
	CMCON = 0b00000111;   //Comparators Off
	TRISA = 0b00000000;
	LCD_RS = 0;
	LCD_EN = 0;
	//LCD_RW = 0;
	
	__delay_ms(50);	// wait 15mSec after power applied,
	LCD_DATA	 = init_value;
	LCD_STROBE();
	__delay_ms(5);
	LCD_STROBE();
	__delay_us(200);
	LCD_STROBE();
	__delay_us(200);
	LCD_DATA = 28;	// Four bit mode
	LCD_STROBE();

	lcd_write(0x20); // Set interface length
	lcd_write(0xF); // Display On, Cursor On, Cursor Blink
	lcd_clear();	// Clear screen
	lcd_write(0x6); // Set entry Mode
bearing
Inlägg: 11675
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Problem med flyttning av program i C

Inlägg av bearing »

Jag tror inte ditt problem har med "set interface length" att göra. Problemet är antagligen att strobe-signalen inte har någon verkan, d.v.s inget av de kommandon du skickat har fått någon verkan.

Prova:

Kod: Markera allt

//Ändra i init
LCD_EN = 1;  //LCD_EN = 0;

//Ändra makrot
#define   LCD_STROBE()   {LCD_EN = 0; LCD_EN = 0; LCD_EN = 1; LCD_EN = 1;}
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Problem med flyttning av program i C

Inlägg av Icecap »

Kan det inte vara så enkelt att de 1-radiga är med en K6???? kontrolkrets istället?
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med flyttning av program i C

Inlägg av sodjan »

> ...förutom benen på de oanvända data in (D0-D3) är jordade...

Rekomendationen är att lämna dom öppna/oanslutna. Data
pinnarna har interna pullup i HD44780 controllern och det finns
risk för problem om/när controllern hamnar i "read" mode om man
lägger dom hårt till någon nivå. Prova att koppla loss dom...
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med flyttning av program i C

Inlägg av sodjan »

> 2-radiga skall beställas.

Jag har en del 16x2 LCD'er. Jag kan skicka över 2 st av denna :
http://www.tradera.com/1st-hd44780-lcd- ... _163905606

Eller en av dessa :
http://www.tradera.com/lcd-modul-16x2-h ... _163975558

Maila en adress om du är intresserad. Jag kan posta dom under dagen...
Användarvisningsbild
SeniorLemuren
Inlägg: 8407
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Problem med flyttning av program i C

Inlägg av SeniorLemuren »

Hrrmm aarrgghh host. Efter allt engagement som lagts ner av forumet på detta problem så får jag väl ta en del spydigheter :D

Jag får väl ursäkta mig med att det är första displayen med bakgrundsbelysning jag använder. Dessutom med mörkblå bakgrund. De displayer jag hanterat tidigare har varit ljusgröna utan bakgrundsbelysning.

Saken är den att displayen funkar och har väl antagligen gjort det ganska från början, åtminstone första halvan av den. 8)

Om vi tar det från början. När jag anslöt displaykortet till 5 volt så hände inte något synbart. Bakgrundsbelysningen funkade inte. Jag tyckte att det kan jag kolla upp senare, nu ville jag se att textfunktionen funkade men displayen visade bara sin mörkblå bakgrund. Jag skruvade på kontrasten och kunde se 8 st rutor utan innehåll visa sig. Ingen text.

Det var då jag började terrorisera forumet med frågor. Trots alla bra idéer som inkom så funkade det inte. den gick i papperskorgen (i 30 sekunder). :yeahright:

Nåväl, jag kunde ju i alla fall kolla upp varför inte bakgrundsbelysningen funkade, så jag plockade upp den och anslöt 5 volt direkt på tamparna där de kommer ut från displayen och se på f..n den lyser. :bravo:

När jag ansluter 5 volt på terminalen så lyser den inte. Jag tänkte att jag skiter i vad kineserna tycker är plus och minus och ansluter den tvärt emot deras schema och voila! nu lös den. :bravo:

Stärkt av framgången så pluggade jag på den på kortet och skruvar lite på kontrasten och se på :shock: :shock: :shock: nu ser man texten klart som på julafton. :happy:

Halva texten alltså 8 tecken finns där. Men nu är jag på gång. Andra hälften av tecknen skriver man in på samma radadress som om man skulle skriva på rad 2. Man får alltså skriva halva texten, stega fram i minnet och skriva andra halvan av texten.

Så här ser scemat med anslutningarna ut för den aktuella displayen. plus och minus är omvända.
lcd_diagram.jpg
Så här blev det:
LCD16x1.JPG
Den röda trådöglan ersätter en 7805 som jag inte hade hemma för tillfället. Jag valde att lägga kortet 90 grader vinklat mot displayen, så det tar minimal plats på panelen. På djupet finns det gott om plats
LCD16x1_1.JPG
Nu återstår "bara" att porta varvräknarprogrammet i denna PIC, så det kan tänkas att jag återkommer med mer galenskaper. :jimmyhacker:

För dom som undrar. Ja det är en tomat. :D
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46933
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Problem med flyttning av program i C

Inlägg av TomasL »

Där ser man :lol: det är skôj nästan jämt.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Problem med flyttning av program i C

Inlägg av Icecap »

:rofl
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med flyttning av program i C

Inlägg av sodjan »

Min erfarenhet är att LCD'er som är "inverterade" (d.v.s där själva texten
är *ljusare* än bakgrunden, normalt är det ju tvärt om) alltid behöver
bakgrunsbelysningen tänd för att det ska synas något alls.

Jag hade en röd av samma typ (med röd lysande text mot en mörk, nästan
svart, bakgrund) och på den syntes det ingenting om BL var släckt...

Det är märkligt, det finns alltid *något* mer som man kan lära sig... :-)

Betyder detta att du inte längre är intresserade av de LCD'er som vi
mailade om ? :-)
Användarvisningsbild
SeniorLemuren
Inlägg: 8407
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Problem med flyttning av program i C

Inlägg av SeniorLemuren »

Skickade nyss mail. vill köpa 2 st av dom 4 radiga till ett annat projekt :)
Användarvisningsbild
swesysmgr
Inlägg: 14922
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: Problem med flyttning av program i C

Inlägg av swesysmgr »

SeniorLemuren skrev:Halva texten alltså 8 tecken finns där. Men nu är jag på gång. Andra hälften av tecknen skriver man in på samma radadress som om man skulle skriva på rad 2. Man får alltså skriva halva texten, stega fram i minnet och skriva andra halvan av texten.
Det brukar gå att ändra genom att initialisera displayen annorlunda. Default för controllern är (oftast) 8tkn och jag gissar att det beror på att samma styrning används till många olika displaystorlekar.
Skriv svar