Tiedote ylläpidolta:

Elektroniikkafoorumi sulkeutuu tietoturva ongelmien takia.
Käyttäjien tietoja (yv:t, sähköpostiosoite ja salasanan hash) on saattanut vuotaa vääriin käsiin.

Foorumi on asettettu vain luku tilaan. Vanhoja keskusteluja voi lukea palvelinsopimuksen päättymiseen asti.
Tietokannasta on poistettu kaikki salasanat, sähköpostiosoitteet ja yksityisviestit.

Jos haluat saada omat yksityisviestisi, lähetä sähköpostia yllapito@elektroniikkafoorumi.com
samasta sähköpostista mikä oli foorumin tiedoissa niin voin kaivella niitä varmuuskopioista.

Mielenkiintoni foorumin ylläpitoon on viime vuosina ollut vähäistä jo muutenkin joten tähän on hyvä lopettaa.
Kiitokset kaikille käyttäjilla ja pahoittelut mahdollisista ongelmista.

Päivitys: Näyttäisi siltä että mahdollinen vuoto koski vanhaa phpBB2 tietokantaa,
joten helmikuuta 2012 uudemmat tiedot pitäisi olla turvassa.

-Lahha
yllapito@elektroniikkafoorumi.com


Tuntimittari

Keskustelua digitaalielektroniikasta

Valvoja: Moderaattorit


Vanhempi jäsen
Vanhempi jäsen
Viestit: 400
Liittynyt: Pe Maalis 06, 2009 18:23
ViestiLähetetty: Ti Helmi 07, 2012 22:51
Ei tuosta nyt oikeen osaa sanoa, pitäisi tietää kiteen taajuus ja tuosta delay_ms funktiosta generoitu assembly-koodi.

EDIT: siis jos haluaisi laskea tuon viivesilmukan tarkan ajan.
Viimeksi muokannut L18 päivämäärä Ke Helmi 08, 2012 6:33, muokattu yhteensä 1 kerran

Jäsen
Jäsen
Viestit: 147
Liittynyt: Su Elo 30, 2009 13:44
ViestiLähetetty: Ke Helmi 08, 2012 5:01
Ohjelma pyörii silmukassa, johon kuluu viivefunktion kuluttama aika + näytölle ja eeprommiin kirjoittamiseen kuluva aika.
Siksi viiveen pitää olla alle yksi sekunti.

Ymmärsinkö oikein, että aika kirjoitetaan eeprommiin sekunnin välein ?
Eeprommilla on rajallinen kestävyys, tyypillisesti n. 10 miljoonaa kirjoituskertaa, joka tässä tulee täyteen n. 2800 tunnin jälkeen.

Miksi sekunnit luetaan eeprommista, kun sekunneiksi tulee 60 ?
Sama minuuttien kanssa.

Kokenut jäsen
Kokenut jäsen
Viestit: 152
Liittynyt: Pe Tammi 06, 2012 16:34
ViestiLähetetty: Ke Helmi 08, 2012 8:04
ilman muuta tuommoinen kannaattaa toteuttaa timer keskeytyksellä. joka pic 16f84:stakin löytyy. pää ohjelman laitat päivittäämään näyttöä ja keskeytyksellä laskeskelet aikaa.

Vanhempi jäsen
Vanhempi jäsen
Viestit: 595
Liittynyt: La Marras 12, 2011 14:56
ViestiLähetetty: Ke Helmi 08, 2012 11:42
jjw kirjoitti:Ymmärsinkö oikein, että aika kirjoitetaan eeprommiin sekunnin välein ?
Eeprommilla on rajallinen kestävyys, tyypillisesti n. 10 miljoonaa kirjoituskertaa, joka tässä tulee täyteen n. 2800 tunnin jälkeen.


Hyvä huomautus. Kannattaa kyllä kirjoitella sinne huomattavasti harvemmin.
Ei taida maailma kaatua, vaikka jonkun virheen tai virtakatkon takia jokunen minuutti katoaakin muistista.

Kokenut jäsen
Kokenut jäsen
Viestit: 152
Liittynyt: Pe Tammi 06, 2012 16:34
ViestiLähetetty: Ke Helmi 08, 2012 13:50
onkos tuohon kytkentään mahdollista laittaa joku haistelija, esim kun moottori sammuu niin käy kirjoittamassa ajan eeppromiin ja alkaa vaikka nukkumaan tuo picci?? tai siinä vaiheessa kirjoittaa eeprommin kun muuttuja on täynnä, esim 255 ,1024 tai mikä nyt on muuttajan maks. arvo.

Jäsen
Jäsen
Viestit: 108
Liittynyt: Pe Heinä 03, 2009 17:18
ViestiLähetetty: To Helmi 09, 2012 23:35
Tuota en tiennyt, että eeprom kestää vain rajallisen määrän. Voi tuosta toki ainakin tuon sekunnin tallennuksen ottaa pois niin kestää jo huomattavasti kauemmin.

Olin ajatellut että ei olisi erillistä haistelijaa vaan, kun kone sammuu niin katkeaa mittarilta sähköt ja tunnit on muistissa eeprommilla. Voisihan tuohon sellaisen toki tehdä, että kun kone sammuu niin sitten vasta tallennetaan eeprommille. Haistelija vaatisi jonkin akun tai pariston laskurille, kun pyörässä ei ole omaa akkua.

Täytyy tutkia tuota ohjelman tekoa keskeytyksillä, kun tuolta Flowcodesta tuollainen "keskeytyspalikka" löytyy valmiina.



Paranneltu versio:


#define MX_PIC

//Määrittää mikro-ohjaimen
#define P16F84A
#define MX_EE
#define MX_EE_TYPE1
#define MX_EE_SIZE 64

//funktiot
#define MX_CLK_SPEED 4000000
#ifdef _BOOSTC
#include <system.h>
#endif
#ifdef HI_TECH_C
#include <pic.h>
#endif

//Konfigurointi data
#ifdef _BOOSTC
#pragma DATA 0x2007, 0x3ffa
#endif
#ifdef HI_TECH_C
__CONFIG(0x3ffa);
#endif

//Sisäiset toiminnot
#include "C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h"

//Makro-funktion kuvaukset


//Muuttujakuvaukset
char FCV_MINUUTTI;
char FCV_NOLLAUS;
char FCV_MUISTI;
char FCV_KYTKIN;
char FCV_SEKUNTI;
char FCV_TUNTI;

char FCLV_LOOP1;

//Defines:

/**** Macro Substitutions ****
portb = D1 Port
trisb = D1 Data Direction
portb = D2 Port
trisb = D2 Data Direction
portb = D3 Port
trisb = D3 Data Direction
portb = D4 Port
trisb = D4 Data Direction
portb = RS Port
trisb = RS Data Direction
portb = E Port
trisb = E Data Direction
0 = Data 1_Pin
1 = Data 2 Pin
2 = Data 3 Pin
3 = Data 4 Pin
4 = RS Pin
5 = Enable Pin
LCD_264502 = Unique Component Reference Number
2 = Row Count
16 = Column Count
******************************/

//component connections
#define LCD_264502_PORT0 portb
#define LCD_264502_TRIS0 trisb
#define LCD_264502_PORT1 portb
#define LCD_264502_TRIS1 trisb
#define LCD_264502_PORT2 portb
#define LCD_264502_TRIS2 trisb
#define LCD_264502_PORT3 portb
#define LCD_264502_TRIS3 trisb
#define LCD_264502_PORT4 portb
#define LCD_264502_TRIS4 trisb
#define LCD_264502_PORT5 portb
#define LCD_264502_TRIS5 trisb
#define LCD_264502_BIT0 0
#define LCD_264502_BIT1 1
#define LCD_264502_BIT2 2
#define LCD_264502_BIT3 3
#define LCD_264502_RS 4
#define LCD_264502_E 5
#define LCD_264502_ROWCNT 2
#define LCD_264502_COLCNT 16

#ifdef _BOOSTC
#define LCD_264502_DELAY delay_10us(10)
#endif
#ifdef _C2C_
#define LCD_264502_DELAY delay_us(100)
#endif
#ifdef HI_TECH_C
#define LCD_264502_DELAY __delay_us(120)
#endif
#ifndef LCD_264502_DELAY
#define LCD_264502_DELAY delay_us(100)
#endif




//LCDDisplay0: //Makro-funktion kuvaukset

void FCD_LCDDisplay0_RawSend(char in, char mask);
void FCD_LCDDisplay0_Start();
void FCD_LCDDisplay0_Clear();
void FCD_LCDDisplay0_PrintASCII(char Character);
void FCD_LCDDisplay0_Command(char in);
void FCD_LCDDisplay0_Cursor(char x, char y);
void FCD_LCDDisplay0_PrintNumber(short Number);
void FCD_LCDDisplay0_PrintString(char* String, char MSZ_String);
void FCD_LCDDisplay0_ScrollDisplay(char Direction, char Num_Positions);
void FCD_LCDDisplay0_ClearLine(char Line);
void FCD_LCDDisplay0_RAM_Write(char nIdx, char d0, char d1, char d2, char d3, char d4, char d5, char d6, char d7);
//Defines:

/**** Macro Substitutions ****
******************************/




//EEPROM0: //Makro-funktion kuvaukset

char FCD_EEPROM0_EEPROMRead(short addr);
void FCD_EEPROM0_WriteEEPROM(short addr, char data);



//LCDDisplay0: //Makro-toteutukset


void FCD_LCDDisplay0_RawSend(char in, char mask)
{
unsigned char pt;

clear_bit(LCD_264502_PORT0, LCD_264502_BIT0);
clear_bit(LCD_264502_PORT1, LCD_264502_BIT1);
clear_bit(LCD_264502_PORT2, LCD_264502_BIT2);
clear_bit(LCD_264502_PORT3, LCD_264502_BIT3);
clear_bit(LCD_264502_PORT4, LCD_264502_RS);
clear_bit(LCD_264502_PORT5, LCD_264502_E);
pt = ((in >> 4) & 0x0f);
if (pt & 0x01)
set_bit(LCD_264502_PORT0, LCD_264502_BIT0);
if (pt & 0x02)
set_bit(LCD_264502_PORT1, LCD_264502_BIT1);
if (pt & 0x04)
set_bit(LCD_264502_PORT2, LCD_264502_BIT2);
if (pt & 0x08)
set_bit(LCD_264502_PORT3, LCD_264502_BIT3);
if (mask)
set_bit(LCD_264502_PORT4, LCD_264502_RS);
LCD_264502_DELAY;
set_bit (LCD_264502_PORT5, LCD_264502_E);
LCD_264502_DELAY;
clear_bit (LCD_264502_PORT5, LCD_264502_E);
pt = (in & 0x0f);
LCD_264502_DELAY;
clear_bit(LCD_264502_PORT0, LCD_264502_BIT0);
clear_bit(LCD_264502_PORT1, LCD_264502_BIT1);
clear_bit(LCD_264502_PORT2, LCD_264502_BIT2);
clear_bit(LCD_264502_PORT3, LCD_264502_BIT3);
clear_bit(LCD_264502_PORT4, LCD_264502_RS);
clear_bit(LCD_264502_PORT5, LCD_264502_E);
if (pt & 0x01)
set_bit(LCD_264502_PORT0, LCD_264502_BIT0);
if (pt & 0x02)
set_bit(LCD_264502_PORT1, LCD_264502_BIT1);
if (pt & 0x04)
set_bit(LCD_264502_PORT2, LCD_264502_BIT2);
if (pt & 0x08)
set_bit(LCD_264502_PORT3, LCD_264502_BIT3);
if (mask)
set_bit(LCD_264502_PORT4, LCD_264502_RS);
LCD_264502_DELAY;
set_bit (LCD_264502_PORT5, LCD_264502_E);
LCD_264502_DELAY;
clear_bit (LCD_264502_PORT5, LCD_264502_E);
LCD_264502_DELAY;
}

void FCD_LCDDisplay0_Start()
{

clear_bit(LCD_264502_TRIS0, LCD_264502_BIT0);
clear_bit(LCD_264502_TRIS1, LCD_264502_BIT1);
clear_bit(LCD_264502_TRIS2, LCD_264502_BIT2);
clear_bit(LCD_264502_TRIS3, LCD_264502_BIT3);
clear_bit(LCD_264502_TRIS4, LCD_264502_RS);
clear_bit(LCD_264502_TRIS5, LCD_264502_E);

Wdt_Delay_Ms(12);

FCD_LCDDisplay0_RawSend(0x33, 0);
Wdt_Delay_Ms(2);
FCD_LCDDisplay0_RawSend(0x33, 0);
Wdt_Delay_Ms(2);
FCD_LCDDisplay0_RawSend(0x32, 0);
Wdt_Delay_Ms(2);
FCD_LCDDisplay0_RawSend(0x2c, 0);
Wdt_Delay_Ms(2);
FCD_LCDDisplay0_RawSend(0x06, 0);
Wdt_Delay_Ms(2);
FCD_LCDDisplay0_RawSend(0x0c, 0);
Wdt_Delay_Ms(2);

//clear the display
FCD_LCDDisplay0_RawSend(0x01, 0);
Wdt_Delay_Ms(2);
FCD_LCDDisplay0_RawSend(0x02, 0);
Wdt_Delay_Ms(2);

}

void FCD_LCDDisplay0_Clear()
{

FCD_LCDDisplay0_RawSend(0x01, 0);
Wdt_Delay_Ms(2);
FCD_LCDDisplay0_RawSend(0x02, 0);
Wdt_Delay_Ms(2);

}

void FCD_LCDDisplay0_PrintASCII(char Character)
{

FCD_LCDDisplay0_RawSend(Character, 0x10);

}

void FCD_LCDDisplay0_Command(char in)
{

FCD_LCDDisplay0_RawSend(in, 0);
Wdt_Delay_Ms(2);

}

void FCD_LCDDisplay0_Cursor(char x, char y)
{

#if (LCD_264502_ROWCNT == 1)
y=0x80;
#endif

#if (LCD_264502_ROWCNT == 2)
if (y==0)
y=0x80;
else
y=0xc0;
#endif

#if (LCD_264502_ROWCNT == 4)
if (y==0)
y=0x80;
else if (y==1)
y=0xc0;

#if (LCD_264502_COLCNT == 16)
else if (y==2)
y=0x90;
else
y=0xd0;
#endif

#if (LCD_264502_COLCNT == 20)
else if (y==2)
y=0x94;
else
y=0xd4;
#endif
#endif

FCD_LCDDisplay0_RawSend(y+x, 0);
Wdt_Delay_Ms(2);

}

void FCD_LCDDisplay0_PrintNumber(short Number)
{

short tmp_int;
char tmp_byte;
if (Number < 0)
{
FCD_LCDDisplay0_RawSend('-', 0x10);
Number = 0 - Number;
}

tmp_int = Number;
if (Number >= 10000)
{
tmp_byte = tmp_int / 10000;
FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);

while (tmp_byte > 0)
{
tmp_int = tmp_int - 10000;
tmp_byte--;
}
}
if (Number >= 1000)
{
tmp_byte = tmp_int / 1000;
FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);

while (tmp_byte > 0)
{
tmp_int = tmp_int - 1000;
tmp_byte--;
}
}
if (Number >= 100)
{
tmp_byte = tmp_int / 100;
FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);

while (tmp_byte > 0)
{
tmp_int = tmp_int - 100;
tmp_byte--;
}
}
if (Number >= 10)
{
tmp_byte = tmp_int / 10;
FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);

while (tmp_byte > 0)
{
tmp_int = tmp_int - 10;
tmp_byte--;
}
}
FCD_LCDDisplay0_RawSend('0' + tmp_int, 0x10);

}

void FCD_LCDDisplay0_PrintString(char* String, char MSZ_String)
{

char idx = 0;

for (idx=0; idx<MSZ_String; idx++)
{
#ifdef _BOOSTC
if (String[idx] == 0)
{
break;
}
FCD_LCDDisplay0_RawSend(String[idx], 0x10);
#endif

#ifdef HI_TECH_C
if (*String == 0)
{
break;
}
FCD_LCDDisplay0_RawSend(*String, 0x10);
String++;
#endif
}

}

void FCD_LCDDisplay0_ScrollDisplay(char Direction, char Num_Positions)
{

char cmd = 0;
char count;

//Choose the direction
switch (Direction)
{
case 0:
case 'l':
case 'L':

cmd = 0x18;
break;

case 1:
case 'r':
case 'R':

cmd = 0x1C;
break;

default:
break;
}

//If direction accepted then scroll the specified amount
if (cmd)
{
for (count = 0; count < Num_Positions; count++)
FCD_LCDDisplay0_Command(cmd);
}

}

void FCD_LCDDisplay0_ClearLine(char Line)
{

char count;
char rowcount;

//Define number of columns per line
#if (LCD_264502_ROWCNT == 1)
rowcount=80;
#endif

#if (LCD_264502_ROWCNT == 2)
rowcount=40;
#endif

#if (LCD_264502_ROWCNT == 4)
#if (LCD_264502_COLCNT == 16)
rowcount=16;
#endif
#if (LCD_264502_COLCNT == 20)
rowcount=20;
#endif
#endif

//Start at beginning of the line
FCD_LCDDisplay0_Cursor (0, Line);

//Send out spaces to clear line
for (count = 0; count < rowcount; count++)
FCD_LCDDisplay0_RawSend(' ', 0x10);

//Move back to the beginning of the line.
FCD_LCDDisplay0_Cursor (0, Line);

}

void FCD_LCDDisplay0_RAM_Write(char nIdx, char d0, char d1, char d2, char d3, char d4, char d5, char d6, char d7)
{
//set CGRAM address
FCD_LCDDisplay0_RawSend(64 + (nIdx << 3), 0);
delay_ms(2);

//write CGRAM data
FCD_LCDDisplay0_RawSend(d0, 0x10);
FCD_LCDDisplay0_RawSend(d1, 0x10);
FCD_LCDDisplay0_RawSend(d2, 0x10);
FCD_LCDDisplay0_RawSend(d3, 0x10);
FCD_LCDDisplay0_RawSend(d4, 0x10);
FCD_LCDDisplay0_RawSend(d5, 0x10);
FCD_LCDDisplay0_RawSend(d6, 0x10);
FCD_LCDDisplay0_RawSend(d7, 0x10);

//Clear the display
FCD_LCDDisplay0_RawSend(0x01, 0);
delay_ms(2);
FCD_LCDDisplay0_RawSend(0x02, 0);
delay_ms(2);
}



//EEPROM0: //Makro-toteutukset


char FCD_EEPROM0_EEPROMRead(short addr)
{
char data = 0;

#ifdef _BOOSTC
#ifdef MX_EE
#ifndef MX_EEADR
#ifdef EEADR
#define MX_EEADR eeadr
#endif
#ifdef EEADRL
#define MX_EEADR eeadrl
#endif
#endif
#ifndef MX_EEDATA
#ifdef EEDATA
#define MX_EEDATA eedata
#endif
#ifdef EEDATAL
#define MX_EEDATA eedatal
#endif
#ifdef EEDATL
#define MX_EEDATA eedatl
#endif
#endif

#ifndef MX_EEADR //Catch Error
#pragma error EEPROM error - MX_EEADR not set
#endif

#ifndef MX_EEDATA
#pragma error EEPROM error - MX_EEDATA not set
#endif

MX_EEADR = addr & 0xff;
#if (MX_EE_SIZE > 256)
eeadrh = (addr & 0xff00) >> 8;
#endif
#ifdef MX_EE_TYPE2
clear_bit(eecon1, EEPGD);
#endif
#ifdef MX_EE_TYPE3
clear_bit(eecon1, EEPGD);
clear_bit(eecon1, CFGS);
#endif
set_bit(eecon1, RD);
data = MX_EEDATA;
#else
#ifdef MX_EE_TYPE67X
#pragma error "FlowCode does not support EEPROM for this device"
#else
#ifdef MX_EE_TYPE62X
#pragma error "FlowCode does not support EEPROM for this device"
#else
#pragma error "Chip does not have EEPROM memory"
#endif
#endif
#endif
#endif
#ifdef HI_TECH_C
data = eeprom_read(addr);
#endif

return (data);

}

void FCD_EEPROM0_WriteEEPROM(short addr, char data)
{
#ifdef _BOOSTC
#ifdef MX_EE
#ifndef MX_EEADR
#ifdef EEADR
#define MX_EEADR eeadr
#endif
#ifdef EEADRL
#define MX_EEADR eeadrl
#endif
#endif
#ifndef MX_EEDATA
#ifdef EEDATA
#define MX_EEDATA eedata
#endif
#ifdef EEDATAL
#define MX_EEDATA eedatal
#endif
#endif

#ifndef MX_EEADR //Catch Error
#pragma error EEPROM error - MX_EEADR not set
#endif

#ifndef MX_EEDATA
#pragma error EEPROM error - MX_EEDATA not set
#endif

char bInterruptsEnabled;

//wait for previous EE writes to complete...
while (test_bit(eecon1, WR));

MX_EEADR = addr & 0xff;
#if (MX_EE_SIZE > 256)
eeadrh = (addr & 0xff00) >> 8;
#endif
MX_EEDATA = data;
#ifdef MX_EE_TYPE2
clear_bit(eecon1, EEPGD);
#endif
#ifdef MX_EE_TYPE3
clear_bit(eecon1, EEPGD);
clear_bit(eecon1, CFGS);
#endif
set_bit(eecon1, WREN);
bInterruptsEnabled = test_bit(intcon, GIE);
clear_bit(intcon, GIE); //Disable Interrupts

eecon2 = 0x55;
eecon2 = 0xAA;
set_bit(eecon1, WR);
while (test_bit(eecon1, WR)); //wait for EE write to complete...

if (bInterruptsEnabled)
set_bit(intcon, GIE); //Re-enable Interrupts
clear_bit(eecon1, WREN);
#else
#ifdef MX_EE_TYPE67X
#pragma error FlowCode does not support EEPROM for this device
#else
#ifdef MX_EE_TYPE62X
#pragma error FlowCode does not support EEPROM for this device
#else
#pragma error Chip does not have EEPROM memory
#endif
#endif
#endif
#endif
#ifdef HI_TECH_C
eeprom_write(addr, data);
#endif

}

//Makro-toteutukset

void main()
{

//alustus


//Keskeytyksen alustuskoodi
option_reg = 0xC0;


//Kommentti:
//Luetaan muistista tunnit


//Liitäntäpiste
//Liitäntäpiste: [D]: D
FCC_Perusohjelma_D:
;


//Kutsu komponenttimakro
//Kutsu komponenttimakro: Tunti=EEPROM(0)::Read(0)
FCV_TUNTI = FCD_EEPROM0_EEPROMRead(0);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: Minuutti=EEPROM(0)::Read(1)
FCV_MINUUTTI = FCD_EEPROM0_EEPROMRead(1);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: sekunti=EEPROM(0)::Read(2)
FCV_SEKUNTI = FCD_EEPROM0_EEPROMRead(2);


//Tulo
//Tulo: PORT A -> Kytkin
trisa = trisa | 0xff;
FCV_KYTKIN = porta;


//Päätös
//Päätös: Kytkin=0?
if (FCV_KYTKIN==0)
{
//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Start
FCD_LCDDisplay0_Start();


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Nollaa
FCD_LCDDisplay0_Clear();


//Silmukka
//Silmukka: Silmukka 255 ajat
for (FCLV_LOOP1=0; FCLV_LOOP1<255; FCLV_LOOP1++)
{
//Laskutoimitus
//Laskutoimitus:
// Tunti = Tunti+1
FCV_TUNTI = FCV_TUNTI+1;


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostanumero(Tunti)
FCD_LCDDisplay0_PrintNumber(FCV_TUNTI);


//Viive
//Viive: 500 ms
delay_ms(255);
delay_ms(245);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Nollaa
FCD_LCDDisplay0_Clear();


//Tulo
//Tulo: PORT A -> Kytkin
trisa = trisa | 0xff;
FCV_KYTKIN = porta;


//Päätös
//Päätös: Kytkin=1?
if (FCV_KYTKIN==1)
{
//Kutsu komponenttimakro
//Kutsu komponenttimakro: EEPROM(0)::Write(0, Tunti)
FCD_EEPROM0_WriteEEPROM(0, FCV_TUNTI);


//Mene liitäntäpisteeseen
//Mene liitäntäpisteeseen: [D]: D
goto FCC_Perusohjelma_D;


}


}


//Mene liitäntäpisteeseen
//Mene liitäntäpisteeseen: [D]: D
goto FCC_Perusohjelma_D;


}


//Kommentti:
//Tunti


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Start
FCD_LCDDisplay0_Start();


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Nollaa
FCD_LCDDisplay0_Clear();


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostanumero(Tunti)
FCD_LCDDisplay0_PrintNumber(FCV_TUNTI);


//Kommentti:
//Minuutti


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Kursori(2, 0)
FCD_LCDDisplay0_Cursor(2, 0);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostamerkkijono(":")
FCD_LCDDisplay0_PrintString(":",1);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostanumero(Minuutti)
FCD_LCDDisplay0_PrintNumber(FCV_MINUUTTI);


//Kommentti:
//Sekunti


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Kursori(5, 0)
FCD_LCDDisplay0_Cursor(5, 0);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostamerkkijono(":")
FCD_LCDDisplay0_PrintString(":",1);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostanumero(sekunti)
FCD_LCDDisplay0_PrintNumber(FCV_SEKUNTI);


//Liitäntäpiste
//Liitäntäpiste: [B]: B
FCC_Perusohjelma_B:
;


//Liitäntäpiste
//Liitäntäpiste: [C]: C
FCC_Perusohjelma_C:
;


//Liitäntäpiste
//Liitäntäpiste: [A]: A
FCC_Perusohjelma_A:
;


//Päätös
//Päätös: sekunti = 60?
if (FCV_SEKUNTI == 60)
{
//Laskutoimitus
//Laskutoimitus:
// Minuutti = Minuutti + 1
FCV_MINUUTTI = FCV_MINUUTTI + 1;


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Kursori(2, 0)
FCD_LCDDisplay0_Cursor(2, 0);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostamerkkijono(":")
FCD_LCDDisplay0_PrintString(":",1);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostanumero(Minuutti)
FCD_LCDDisplay0_PrintNumber(FCV_MINUUTTI);


//Päätös
//Päätös: Minuutti = 60?
if (FCV_MINUUTTI == 60)
{
//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Nollaa
FCD_LCDDisplay0_Clear();


//Laskutoimitus
//Laskutoimitus:
// Tunti = Tunti + 1
FCV_TUNTI = FCV_TUNTI + 1;


//Laskutoimitus
//Laskutoimitus:
// sekunti = 0
// Minuutti = 0
FCV_SEKUNTI = 0;
FCV_MINUUTTI = 0;


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostanumero(Tunti)
FCD_LCDDisplay0_PrintNumber(FCV_TUNTI);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Kursori(2, 0)
FCD_LCDDisplay0_Cursor(2, 0);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostamerkkijono(":")
FCD_LCDDisplay0_PrintString(":",1);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostanumero(Minuutti)
FCD_LCDDisplay0_PrintNumber(FCV_MINUUTTI);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: EEPROM(0)::Write(0, Tunti)
FCD_EEPROM0_WriteEEPROM(0, FCV_TUNTI);


//Mene liitäntäpisteeseen
//Mene liitäntäpisteeseen: [C]: C
goto FCC_Perusohjelma_C;


} else {
//Kutsu komponenttimakro
//Kutsu komponenttimakro: EEPROM(0)::Write(1, Minuutti)
FCD_EEPROM0_WriteEEPROM(1, FCV_MINUUTTI);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Kursori(6, 0)
FCD_LCDDisplay0_Cursor(6, 0);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostamerkkijono("0 ")
FCD_LCDDisplay0_PrintString("0 ",2);


//Laskutoimitus
//Laskutoimitus:
// sekunti = 0
FCV_SEKUNTI = 0;


//Mene liitäntäpisteeseen
//Mene liitäntäpisteeseen: [A]: A
goto FCC_Perusohjelma_A;


}


} else {
//Tulo
//Tulo: PORT A -> Kytkin
trisa = trisa | 0xff;
FCV_KYTKIN = porta;


//Kommentti:
//Jos kytkin on 5s "1" niin laskuri nollataan


//Päätös
//Päätös: Kytkin=0?
if (FCV_KYTKIN==0)
{
//Laskutoimitus
//Laskutoimitus:
// Nollaus = Nollaus+1
FCV_NOLLAUS = FCV_NOLLAUS+1;


//Päätös
//Päätös: Nollaus=5?
if (FCV_NOLLAUS==5)
{
//Laskutoimitus
//Laskutoimitus:
// Nollaus = 0
// Tunti = 0
// Minuutti = 0
// sekunti = 0
FCV_NOLLAUS = 0;
FCV_TUNTI = 0;
FCV_MINUUTTI = 0;
FCV_SEKUNTI = 0;


//Kutsu komponenttimakro
//Kutsu komponenttimakro: EEPROM(0)::Write(0, Tunti)
FCD_EEPROM0_WriteEEPROM(0, FCV_TUNTI);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: EEPROM(0)::Write(1, Minuutti)
FCD_EEPROM0_WriteEEPROM(1, FCV_MINUUTTI);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Nollaa
FCD_LCDDisplay0_Clear();


//Viive
//Viive: 2 s
delay_s(2);


//Mene liitäntäpisteeseen
//Mene liitäntäpisteeseen: [D]: D
goto FCC_Perusohjelma_D;


}


} else {
//Laskutoimitus
//Laskutoimitus:
// Nollaus = 0
FCV_NOLLAUS = 0;


}


//Laskutoimitus
//Laskutoimitus:
// sekunti = sekunti + 1
FCV_SEKUNTI = FCV_SEKUNTI + 1;


//Viive
//Viive: 988 ms
delay_ms(255);
delay_ms(255);
delay_ms(255);
delay_ms(223);


//Viive
//Viive: 370 us
delay_us(255);
delay_us(115);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Kursori(5, 0)
FCD_LCDDisplay0_Cursor(5, 0);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostamerkkijono(":")
FCD_LCDDisplay0_PrintString(":",1);


//Kutsu komponenttimakro
//Kutsu komponenttimakro: LCDDisplay(0)::Tulostanumero(sekunti)
FCD_LCDDisplay0_PrintNumber(FCV_SEKUNTI);


//Mene liitäntäpisteeseen
//Mene liitäntäpisteeseen: [B]: B
goto FCC_Perusohjelma_B;


}


mainendloop: goto mainendloop;
}

void MX_INTERRUPT_MACRO(void)
{
}

Vanhempi jäsen
Vanhempi jäsen
Viestit: 400
Liittynyt: Pe Maalis 06, 2009 18:23
ViestiLähetetty: Pe Helmi 10, 2012 6:42
Periaatteessa jos laittaisi ison konkan picin käyttöjännitepinneihin, ja sitten yhdellä io-pinnillä haistelisi jännitettä ennen tuota konkkaa, niin luulen että se ehtisi tehdä tallennuksen ennen kuin jännite häviää piiriltä.

Kokenut jäsen
Kokenut jäsen
Viestit: 152
Liittynyt: Pe Tammi 06, 2012 16:34
ViestiLähetetty: Pe Helmi 10, 2012 8:09
nii ja sitten vielä diodi siihen ennen konkkaa (mittapisteen ja konkan väliin).

Jäsen
Jäsen
Viestit: 108
Liittynyt: Pe Heinä 03, 2009 17:18
ViestiLähetetty: Pe Helmi 10, 2012 20:33
Tuota konkkaviritystä voisi kokeilla.

Nyt on ihme vika, kun laitan kytkentään virrat 12V akun ja 7805 kautta niin laskuri ei aina suostu lähtemään käyntiin tai saattaa käydä muutaman sekunnin ja pysähtyy ja jos käden vie lähelle ilman kosketusta niin laskuri pysähtyy. Mistä voisi johtua? Eli toimii vain tuolla pickit2 ohjelmointi laiteella.

Kokenut jäsen
Kokenut jäsen
Viestit: 152
Liittynyt: Pe Tammi 06, 2012 16:34
ViestiLähetetty: Pe Helmi 10, 2012 20:39
mieku en tuosta C:stä ymmärrä hevon v****a, onkos sulla muita keskeytyksiä päällä?? mulla aikoinaan on turhan päiten tuot RB0: int päällä ja kun käden vei lähelle, se sai jostain käsityksen että olis tullu pulssi siihen... sen kun sammutti niin alko pelata voip kyllä olla jokkii muukii...

Jäsen
Jäsen
Viestit: 147
Liittynyt: Su Elo 30, 2009 13:44
ViestiLähetetty: Pe Helmi 10, 2012 21:24
Jos MCLR käytössä, kytke vastuksella plussaan.
Onko oskillaattorin konfigurointi oikein ?
Jos kide > 4MHz, niin HS config, muuten XT
100nF konkka lähelle prossua välille Vdd-Vss.
Regulaattorin konkat ?

Vanhempi jäsen
Vanhempi jäsen
Viestit: 595
Liittynyt: La Marras 12, 2011 14:56
ViestiLähetetty: La Helmi 11, 2012 12:43
F84:ssä mclr on aina käytössä.
Kaipa tuo Flowcode osaa oletuksena konffata käyttämättömät karvat outputeiksi? Mä en kans tuota C kieltä jaksa edes lukea.
Muutenhan tuossa olikin jo monta hyvää ehdotusta. Lisäksi oskillaattori tarvii kiteelle mahdollisimman lyhyet karvat (tai resonaattorille).
Tökkäiltävällä koekytkentälevyllä oskillaattori ei toimi välttämättä ollenkaan oikein.

Jäsen
Jäsen
Viestit: 108
Liittynyt: Pe Heinä 03, 2009 17:18
ViestiLähetetty: La Helmi 11, 2012 23:09
Kytkentä on tehty reikälevylle. Olen picciin kytkenyt näytön, yhden kytkimen, kideoskillaattorin ja käyttöjänniteet, kaikki loput pinnit ovat ilmassa.


Tuon MCLR:n varmaan vaatii toimiakseen kunnolla?

Kuva
Viimeksi muokannut P10neer1 päivämäärä La Helmi 11, 2012 23:30, muokattu yhteensä 1 kerran

Vanhempi jäsen
Vanhempi jäsen
Viestit: 595
Liittynyt: La Marras 12, 2011 14:56
ViestiLähetetty: La Helmi 11, 2012 23:19
P10neer1 kirjoitti:Kytkentä on tehty reikälevylle. Olen picciin kytkenyt näytön, yhden kytkimen ja käyttöjänniteet, kaikki loput pinnit ovat ilmassa.


Mites oskillaattori? Tarviit kiteen ja pari kuormakonkkaa sille tai resonaattorin. Sama taajuus, kuin mille sen softan teit.
RC oskillaattori ei homman tarkoituksen huomioiden käy. Ilman oskillaattoria se saattaa värähdellä vapaasti jollain taajuudella, tai sitten
ei. Kyllä oikea kellopulssi tarvitaan.
Ja se MCLR pinni on vetästävä plussaan vaikka 10k vastuksella.
Jos se nyt on se 16f84, niin mclr on pinni 4 ja kide tai resonaattori tulee 15 ja 16 väliin.

Jäsen
Jäsen
Viestit: 108
Liittynyt: Pe Heinä 03, 2009 17:18
ViestiLähetetty: La Helmi 11, 2012 23:31
Jussi kirjoitti:
P10neer1 kirjoitti:Kytkentä on tehty reikälevylle. Olen picciin kytkenyt näytön, yhden kytkimen ja käyttöjänniteet, kaikki loput pinnit ovat ilmassa.


Mites oskillaattori? Tarviit kiteen ja pari kuormakonkkaa sille tai resonaattorin. Sama taajuus, kuin mille sen softan teit.
RC oskillaattori ei homman tarkoituksen huomioiden käy. Ilman oskillaattoria se saattaa värähdellä vapaasti jollain taajuudella, tai sitten
ei. Kyllä oikea kellopulssi tarvitaan.
Ja se MCLR pinni on vetästävä plussaan vaikka 10k vastuksella.
Jos se nyt on se 16f84, niin mclr on pinni 4 ja kide tai resonaattori tulee 15 ja 16 väliin.



Juu unohtui mainita se kideoskillaattori joka on kytketty oikein. täytyy koittaa jos se MCLR kytkentä auttaisi.
EdellinenSeuraava

Paluu Digitaalielektroniikka

Paikallaolijat

Käyttäjiä lukemassa tätä aluetta: Ei rekisteröityneitä käyttäjiä ja 1 vierailijaa