register frågor PIC 16F1847

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

register frågor PIC 16F1847

Inlägg av newbadboy »

Försöker skriva ut ett ord på en display med koden nedan. Men det vill banne mig inte skriva ut ngt. Jag har säkert missat sätta räät register eller ngt enkelt men jag hittar inte problemet.
Vad har jag missat?

Detta är bara början på ett program därför finns inget att alls i main.


Kod: Markera allt

#define Buzz PORTA.F4
#define ProtectEN PORTB.F3
#define Fan PORTB.F2


//LCD module connection
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RA6_bit;
sbit LCD_D5 at RA7_bit;
sbit LCD_D6 at RA0_bit;
sbit LCD_D7 at RA1_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISA6_bit;
sbit LCD_D5_Direction at TRISA7_bit;
sbit LCD_D6_Direction at TRISA0_bit;
sbit LCD_D7_Direction at TRISA1_bit;
//End LCD module connection



void initMain(){
     
     ADCON0=0b00000000;
     ADCON1=0b00000000;
     ANSELA=0b00000000;

     
     TRISA=0b00000000;
     TRISB=0b00000000;
     LCD_Init();
     LCD_Cmd(_LCD_CURSOR_OFF);


     Fan=1;
//   Buzz=1;
     Delay_ms(100);
     Buzz=0;
     Fan=0;
     
     Lcd_Out(1,1,"TEST");
     }

void main() {
      initMain();
      
      while(1){
      

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

Re: register frågor PIC 16F1847

Inlägg av sodjan »

Vad är det skrivit i? Att det är C syns ju
men är det MikroC, XC8 eller något annat?
Användarvisningsbild
SeniorLemuren
Inlägg: 8389
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: register frågor PIC 16F1847

Inlägg av SeniorLemuren »

newbadboy skrev:Försöker skriva ut ett ord på en display med koden nedan. Men det vill banne mig inte skriva ut ngt. Jag har säkert missat sätta räät register eller ngt enkelt men jag hittar inte problemet.
Vad har jag missat?

sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RA6_bit;
sbit LCD_D5 at RA7_bit;
sbit LCD_D6 at RA0_bit;
sbit LCD_D7 at RA1_bit;
[/code]
mikroC:

sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;



Verkar som MikroC. I MicroC finns exemplet som visar biblioteksrutinen. Där använder man en Nibble (D0 ,, D3) som databitar till displayen.

Jag har aldrig testa så jag är inte säker på om man kan dela upp det som du gör i att använda 2 bitar från den första Nibblen och 2 bitar i den andra Nibblen på en port. Jag misstänker att det inte funkar.

Annars,,, har du jordat R/W, har du kollar att µC verkligen svänger? (lysdiod).
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: register frågor PIC 16F1847

Inlägg av newbadboy »

Isch jag vet inte vad en nibble är.

Det är MikroC, glömde skriva det sorry.

Bifogar schemat så slipper vi en massa onödga missförstånd. Bortse fr att det är 16f628. Orkade inte göra schemasymbol för 1847an bara.

Programmet snurrar. Utgången märkt FAN drar igång fläkten en kort stund.
Har även kontrollmätt att rätt signal går till rätt ställe mellan mcu och display samt övr display signaler.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: register frågor PIC 16F1847

Inlägg av Icecap »

En nibble är en halv byte, antingen övre eller undre halva.

Och det låter helt rätt att du INTE kan dela upp LCD data på olika portar.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: register frågor PIC 16F1847

Inlägg av Magnus_K »

Har du möjlighet att testa med en pot till kontrasten och testa med lite olika nivåer?
Jag hade en gång en display som var mycket känslig för just detta.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: register frågor PIC 16F1847

Inlägg av sodjan »

Dokumentationen säger inte utryckligen att alla 4 bitar måste vara
i samma halva byte (nibble). Men som vanligt är deras manualer
dåliga och aldeles för kortfattade. Självklart skulle det rent tekniskt
kunna fungera att sprida ut de 4 data leningarna, men det blir betydligt
mer och komplex kod i t.ex LCD_out(), det verkar inte sannolikt...

LCD_Cmd(_LCD_CURSOR_OFF);

De MicroC manualer som jag har kollat anger "LCD_CURSOR_OFF".
Men du borde ha fått en varning vid kompileringen om "_LCD_CURSOR_OFF"
inte fungerar eller hittas...
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: register frågor PIC 16F1847

Inlägg av newbadboy »

Magnus_K skrev:Har du möjlighet att testa med en pot till kontrasten och testa med lite olika nivåer?
Jag hade en gång en display som var mycket känslig för just detta.


Har redan pot till kontrast :).. det var det första jag också tänkte på
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: register frågor PIC 16F1847

Inlägg av newbadboy »

sodjan skrev:Dokumentationen säger inte utryckligen att alla 4 bitar måste vara
i samma halva byte (nibble). Men som vanligt är deras manualer
dåliga och aldeles för kortfattade. Självklart skulle det rent tekniskt
kunna fungera att sprida ut de 4 data leningarna, men det blir betydligt
mer och komplex kod i t.ex LCD_out(), det verkar inte sannolikt...

LCD_Cmd(_LCD_CURSOR_OFF);

De MicroC manualer som jag har kollat anger "LCD_CURSOR_OFF".
Men du borde ha fått en varning vid kompileringen om "_LCD_CURSOR_OFF"
inte fungerar eller hittas...

Kompilatorn tycker allt är ok
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: register frågor PIC 16F1847

Inlägg av newbadboy »

Icecap skrev:En nibble är en halv byte, antingen övre eller undre halva.

Och det låter helt rätt att du INTE kan dela upp LCD data på olika portar.


Så mao måste jag koppla alla siganler på displayen antingen på PORTA eller B? :(

Eller gäller det bara D7-D4? för dem ligger ju alla på PORTA
Användarvisningsbild
SeniorLemuren
Inlägg: 8389
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: register frågor PIC 16F1847

Inlägg av SeniorLemuren »

Det gäller D7 - D4 De ligger visserligen på samma port men du har lagt dom på 2 olika halvor av de 8 byte på port A. Lägg dom på samma halva byte. Ex. A0 - A3 ELLER A4 - A7 eller någon annan port med en hel nibble ledig.

RS och EN är styrsignaler och behandlas en och en så de kan ligga i princip vart som helst.
Användarvisningsbild
SeniorLemuren
Inlägg: 8389
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: register frågor PIC 16F1847

Inlägg av SeniorLemuren »

sodjan skrev:Dokumentationen säger inte utryckligen att alla 4 bitar måste vara
i samma halva byte (nibble). Men som vanligt är deras manualer
dåliga och aldeles för kortfattade. Självklart skulle det rent tekniskt
kunna fungera att sprida ut de 4 data leningarna, men det blir betydligt
mer och komplex kod i t.ex LCD_out(), det verkar inte sannolikt...

LCD_Cmd(_LCD_CURSOR_OFF);

De MicroC manualer som jag har kollat anger "LCD_CURSOR_OFF".
Men du borde ha fått en varning vid kompileringen om "_LCD_CURSOR_OFF"
inte fungerar eller hittas...
I min min beskrivning av rutinen LCD (Version 6.0.0):
Available Lcd Commands
Lcd Command Purpose
_LCD_FIRST_ROW Move cursor to the 1st row
_LCD_SECOND_ROW Move cursor to the 2nd row
_LCD_THIRD_ROW Move cursor to the 3rd row
_LCD_FOURTH_ROW Move cursor to the 4th row
_LCD_CLEAR Clear display
_LCD_RETURN_HOME Return cursor to home position, returns a shifted display to its 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

Example // Clear Lcd display:
Lcd_Cmd(_LCD_CLEAR);
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: register frågor PIC 16F1847

Inlägg av newbadboy »

Nu var jag liite för snabb och hann modda kortet. Jag satte E or RS på RA2 och RA4. NU skriver den ut text på displayen. Så då verkar det ändå som om är hela displayen på samma port så funkar det. Och inte har betydelse av nibble
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: register frågor PIC 16F1847

Inlägg av sodjan »

Jo, visst kan det fungerar om koden i LCD-rutinerna är skrivna så.
Det betyder att t.ex LCD_Out() hanterar de 4 data linjerna separat
och inte optimerar skrivningen till porten speciellt mycket. Kanske
inget problem i ditt fall... :-)

> Jag satte E or RS på RA2 och RA4.

Alltså E flyttad RB5 => RA2 och RS RB4 => RA4.

Jag ser att du saknar ANSELB i din kod i första inlägget.
Det kan ha gjort att RB5 och RB4 inte funegrade som digitala I/O.
ANSELA var däremot med från början.
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: register frågor PIC 16F1847

Inlägg av newbadboy »

Det låter som en mer trolig orsak. Fan vad jag hatar alla de här registerna. Varenda gång jag använder en ny krets så bommar jag en massa.
Skriv svar