G.I.P: automatisch schaduwstation zonder wissels

Gestart door conducteur, 09 mei 2012, 21:33:26 PM

conducteur

Toch bedankt, Dani!  ;)
PS: zo ziet het er nu uit:



In afwachting dat ik beter overweg kan met de cnc om er printjes mee te maken (hulpstuk nodig) nog een oud stuk gaatjesbord gebruikt...

Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

MickeyMouse

Is het display geïnitialiseerd/geconfigureerd?

Geert

Sattrickske

Door op de reset te drukken, krijg je allemaal niet geïnitializeerde pinnetjes die ook met je LCD in verbinding staan.  Daardoor zie je 'm wat flikkeren.  Dat bewijst (nog) niets.

Een 1602 LCD aansturen is helemaal niet zo moeilijk, hieronder m'n libje voor zo'n display in 8bit:
lcd.h

#define LCD_DATA PORTD
#define LCD_DATA_TRIS TRISD
#define LCD_E PORTBbits.RB2
#define LCD_E_TRIS TRISBbits.TRISB2
#define LCD_RW PORTBbits.RB1
#define LCD_RW_TRIS TRISBbits.TRISB1
#define LCD_RS PORTBbits.RB0
#define LCD_RS_TRIS TRISBbits.TRISB0

extern char LCDIsBusy(void);
extern void LCDCommand(unsigned char cmd);
extern void LCDInit(void);
extern void LCDPut(char data);
extern void LCDWrite(char row, char col, char *string);


lcd.c:

#include <htc.h>
#include "lcd.h"
#include "delay.h"

char blocking = 0;

void LCDInit(void) {
blocking = 1;
LCD_DATA_TRIS = 0x00;
    LCD_DATA = 0;
LCD_RS_TRIS = 0;
LCD_E_TRIS = 0;
LCD_RW_TRIS = 0;
LCD_RS = 0;
LCD_E = 0;
LCD_RW = 0;

LCDCommand(0x01); //Clear screen
LCDCommand(0x38); //8 bit, 2 lines, 5x7 dots
LCDCommand(0x06); //Display not rotated, cursor shift right
LCDCommand(0x0C); //Display on, cursor off, blink off
blocking = 0;
return;
}

char LCDIsBusy(void) {
LCD_E = 0;
LCD_RS = 0;
LCD_RW = 1;
LCD_DATA_TRIS = 0xFF; //Make data port input
LCD_DATA = 0;
Delay10Us(1);
LCD_E = 1;

unsigned char busy = 0;
if (blocking == 0) {
if (LCD_DATA&0x80) {
busy = 1;
}
LCD_DATA_TRIS=0x00;
}
return busy;
}

void LCDCommand(unsigned char cmd) {
LCD_DATA = cmd;
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 0;
Delay10Us(5);
LCD_E = 1;
}

void LCDPut(char data) {
LCD_DATA = data;
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 0;
Delay10Us(5);
LCD_E = 1;
return;
}

void LCDWrite(char row, char col, char *string) {
LCDCommand(0x80 + 0x40 * row + col);
while (*string) {
LCDPut(*string);
string++;
}
}


Om in 4bit mode te werken dien je enkel de init methode aan te passen en de LCDPut en LCDWrite de data in 2 stapjes laten doorvoeren.

MickeyMouse

Was daar ook achter aan het zoeken, maar is al een 15-tal jaar geleden en vond niet meteen mijn sourcecode terug... :-[ :-[
Maar goed, Patrick heeft het wel bij de hand  ;D ;D

conducteur

en wat staat in delay.h? Die heb ik toch ook nodig?
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Sattrickske

Citaat van: conducteur op 22 januari 2014, 21:55:24 PM
en wat staat in delay.h? Die heb ik toch ook nodig?
Gewoon routines om pauzes in te lassen.  Kan je makkelijk zelf schrijven met een paar loopjes...

conducteur

Citaat van: Sattrickske op 22 januari 2014, 23:11:00 PM
Citaat van: conducteur op 22 januari 2014, 21:55:24 PM
en wat staat in delay.h? Die heb ik toch ook nodig?
Gewoon routines om pauzes in te lassen.  Kan je makkelijk zelf schrijven met een paar loopjes...
Ik zie het, ik heb echt een expert nodig....
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

dani

Citaat van: conducteur op 24 januari 2014, 08:31:14 AM
Ik zie het, ik heb echt een expert nodig....
Ik zou het anders durven stellen : je moet je toch eens wat meer verdiepen in het leren programmeren, Rian.
Sorry, man, maar wat ik hier nu zie is dat je probeert om anderen jouw werk te laten schrijven.  Als je echt veel interesse hebt, dan ga je er toch helemaal voor ? Ik weet dat je niet vies bent van werk, en dat je allerlei ideetjes hebt, maar je moet ook de nodige tijd maken om ze dan te realiseren.    Ik ben zeker dat al de tijd die je steekt in het navragen, postst lezen, testen van anderen hun werk,  even nuttig kan gebruikt worden om er bvb eens een boek op na te slaan of iets on line op te zoeken.
't is niet mijn bedoeling om te zeggen dat je lui bent, begrijp me niet verkeerd, maar je gaat er veel meer mee leren op die manier , geloof me !
De kruik is te water gegaan...
De kruik is niet meer.

conducteur

#413
Zeker niet, Dani. Ik wil het zeker zelf doen, maar als ik na een week het lcd nog altijd niet aan de praat krijg, weet in zelf niet meer wat ik kan doen...  Het is niet zo evident om het programma te maken met die paar uur les/initiatie c die in gezien heb vorig jaar...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Gerolf

In mijn programmeeromgeving (Bascom AVR) bestaan er standaard instructies om bvb een LCD aan te sturen.
Bestaat er niets dergelijks voor jouw "ras" controllers ?
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

dani

Citaat van: conducteur op 24 januari 2014, 10:52:26 AM
weet in zelf niet meer wat ik kan doen... 
misschien kan je het dan gewoon zonder LCD display doen ?   is dat echt een must ?
Als je het "minimum aan functionaliteit" er in kan krijgen en het werkt volgens het basis principe, zijn displays en Ledjes eigenlijk maar toeters en bellen, toch.
De kruik is te water gegaan...
De kruik is niet meer.

conducteur

Dat kan ook, maar het kan toch niet onoverkomelijk zijn om dit te laten werken, en dan moet ik weer het bedieningspaneel ombouwen...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

dani

ombouwen ?  nee, toch...


"kijk, mevrouw, meneer....  het paneel is al voorzien op toekomstige uitbreidingen maar nu momenteel is vooral naar het functionele gekeken, de afwerking en display is voor de volgende bouw fase maar is nu al gepland en fysisch al voorzien"


Het komt er allemaal op aan hoe je je zaak "verkoop", mijn jonge vriend, je leert dat nog wel naarmate je ouder wordt en ervaring op doet.
De kruik is te water gegaan...
De kruik is niet meer.

Sattrickske

Ik snap het niet goed.  Mijn LCD routine is een standaard routine, zwaar vereenvoudigd naar mijn noden.  Ze komt uit één van de Microchip application notes.  Mits wat zoekwerk kan je die gemakkelijk zelf vinden.
Ten tweede als je in C programmeert werk je altijd met libraries, of je ze nu zelf schrijft (zoals ik), of je download ze (zoals Gerolf en Dani suggereren).  En dit geldt niet alleen voor C, je moet je werk eerst wat organiseren voor je erin vliegt.

En dan verder, zo'n delay is toch echt niet moeilijk. Gewoon ervoor zorgen dat je controller een bepaalde hoeveelheid tijd verliest.  Maar als je wil zal ik vanavond wel de bron hiervan posten.  Ik gebruik precisie delay routines met een mix van assembler en C.  De routines hebben de exacte klokfrequentie nodig (#define).  Voor elk van m'n courante frequenties heb ik een blokje assembler die zeer precies 1 µs wacht.
Voor jouw LCD heb je geen super precieze delays nodig, een paar lege instructies na elkaar is al voldoende.

Maar ik denk dat het grote probleem inderdaad aangegeven werd door Dani.  Je zal echt zelf moeten proberen, door de code van iemand over te nemen, ga je bitter weinig leren.  En de volgende keren dat je iets wil programmeren sta je weer voor hetzelfde probleem.
Ik denk dat je probleem voor dit projectje voornamelijk zit in begrijpen van libraries en includes.  Probeer eens een simpel progje te schrijven waarbij je een led aan en uit laat knipperen met een variabele tussenpauze en zorg dat je volgende files correct gebruikt hebt:
main.c
timer.h
timer.c
Dit mag je niet meer dan een (half)uurtje kosten om zoiets in mekaar te steken.  Desnoods volg je maar een paar tutorials ansi C programming op het internet.

Eerst leren stappen en dan pas lopen  ;)

conducteur

#419
Blink a led? Normaalgezien geen probleem:




/***************************************************************************
*    HITECH C for PIC program A_01- 24/01/2014                   *
•   Author:        Rian De Rous   *
****************************************************************************
*      Processor:     PIC16F887                                               *
*      Compiler:      HI-TECH C                    *
•   Files required:     none         *
•   Discription: light up led1 of port A      *
•   PIN Assignments:    led at A1                                              *
************************************************************************* */
#include <htc.h>
// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled
__CONFIG(FOSC_HS & WDTE_OFF & LVP_OFF & MCLRE_OFF);
#define _XTAL_FREQ  20000000      //20 MHz kristal


void main()
{
   while(1){
     
    TRISA = 0x00;       // configure POORT A als output
    PORTA = 0b00000010;          // Pin A1 hoog
    __delay_ms(500);  //wacht 500 ms
    PORTA=0b00000000; //terug uit
    __delay_ms(500);
}
   
}


(het werkt, zij het dat de led 2seconden aan is en 2 seconden uit, 4x langer dan geprogrammeerd?)

Met biblotheken geen idee hoe dat moet...


edit:
weer iets bijgeleerd, één pin van een poort setten/clearen zonder die ambetante logische bewerkingen op ganse poort van de µC


/* **************************************************************************
* HITECH C for PIC program A_01- 24/01/2014                *
Author:        Rian De Rous *
****************************************************************************
*    Processor:     PIC16F887                                            *
*    Compiler:      HI-TECH C                    *
Files required:     none *
Discription: light up led1 of port A *
PIN Assignments:    led at A1                                            *
************************************************************************* */
#include <htc.h>
// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled
__CONFIG(FOSC_HS & WDTE_OFF & LVP_OFF & MCLRE_OFF);
#define _XTAL_FREQ  20000000


unsigned char i;
void main(){   

TRISA = 0x00;       // configure POORT A als output
   
    RA1=1;  // set enkel RA1 (nieuw)
        __delay_ms(500);  //wacht 500 ms
    RA1=0; //RA1 reset
    __delay_ms(500);
   
    }

nog steeds werkt het veel te traag?
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum