Jump to content
ELFORUM - Forumul Electronistilor

Kreator

Membru activ
  • Content Count

    505
  • Joined

  • Last visited

Community Reputation

26 Se poate si mai bine

About Kreator

  • Rank
    Membru

Contact Methods

  • Website URL
    https://cristinastac.wordpress.com/

Profile Information

  • Locatie
    Baia Mare

Recent Profile Visitors

421 profile views
  1. Kreator

    Micro hidrocentrala

    Microhidrocentralele sunt un dezastru pentru rauri si au devenit un mijloc de imbogatire pentru "baietii destepti". Va rog sa nu promovati asa ceva.
  2. Kreator

    Lucreaza cineva cu FLOWCODE ?

    My_var = a*2^7+b*2^6+c*2^5+...+h
  3. Kreator

    Imi doresc o casa sau nu ?

    Principalul motiv pentru care unii oameni isi vand casa proaspat facuta la tara este lipsa timpului necesar intretinerii ei. Familiile tinere si active care stau mult la job si care mai au si copii de crescut nu prea mai au timp pentru intretinerea casei. Din experienta mea de om crescut la bloc va spun ca odata cu achizitia unei case devii sclavul ei iar pentru o persoana activa care sta la job peste 10 ore pe zi lipsa timpului este o problema. Daca nu-ti intretii casa si curtea acesta incepe sa semene cu o jungla si nu-ti mai face placere sa locuiesti acolo. Dupa ce ajung de la munca trebuie sa fac curatenie in cusca cainelui, sa-i dau de mancare, apoi trebuie hraniti puii de gaina, eventual curatat cotetul acestora, intretinute legumele din solar si gradina, curatati trandafirii, curatate si udate rondurile de flori, o data la doua saptamani trebuie tuns gazonul si credeti-ma ca 15 arii de gazon mie imi ia o zi. In tot acest timp sotia are de munca in casa maturat, sters cu mopul, curatate si udate florile din jardiniere si multe altele pe care nu le stiu. Ajungi sa intri in casa dupa ora 10 seara. Apoi toata sambata este dedicata intretinerii curtii, sudezi , vopsesti, repari, cureti/stropesti pomii din livada sau via, plivesti in gradina si solar, cureti piscina asa ca uite s-a dus si sambata. Iti ramane pentru tine doar duminica si atunci esti asa de obosit ca nu-ti mai arde de nimic. O alta problema este cea a copiilor, care trebuie sculati mult mai devrene si dusi la gradinita sau scoala si apoi pescuiti si dusi inapoi la tara. Daca ai noroc cu parinti sau socri ii ia ei si-i tin pana termini tu, daca nu atunci e o problema ca n-au cum sa ajunga singuri acasa la 15 km de oras. O alta problema este lipsa vietii sociale, nu mai ai timp de iesit la tenis, de clubing, bere cu colegii etc. Cand ma satur de toate astea fug la bloc, toate problemele astea dispar si viata incepe sa reapara!!!! Daca e liniste; NU! Tot auzi plansetele copiilor vecinilor, masinile de tuns iarba iarba ale vecinilor, drujbele celor care isi contruiesc case in jurul tau, chefurile din weekend ale vecinilor! Ramane doar placerea ca mananci puii, legumele si fructele crescute de tine, ca dimineata bei cafeaua in rasaritul soarelui si mai faci o baie in piscina de multe ori doar in weekend si doar daca ai noroc de vreme buna. Daca e mai ieftina viata la tara? NU! Cheltui muuult mai mult decat la bloc.
  4. Kreator

    Ceas cu diplay LED 8x8 dot matrix si modul DS3231

    Si mie imi plac caracterele "bold"-uite! Mi-a luat ceva timp pana le-am creat asa cum imi plac mie adica sa dea bine atat de aproape cat si de la distanta fiindca ceasul va sta outdoor pe terasa de vara. Precizia temperaturii depinde de locul unde e montat modulul DS3231. Daca este in interiorul carcasei ceasului, acesta indica (la mine) cam cu 3 - 5 grade Celsius in plus. Asta deoarece afisajul si regulatorul de tensiune genereaza caldura si incalzeste interiorul carcasei. Daca modulul RTC se monteaza pe exteriorul carcasei ai sa fie in contact cu aerul din mediul ambiant atunci precizia este buna.
  5. Cum modulele electronice de pe eBay au devenit tot mai ieftine se poate realiza cu acestea un ceas interesant, frumos si util, costul realizarii fiind modic. Aici se poate vedea un video despre ce poate ceasul sa faca. Mai multe detalii despre realizarea acestui ceas gasiti AICI, unde este explicat in detaliu modul de functionare a ceasului. Astea fiind spuse, hai sa vedem cum facem ceasul. Schema electrica este urmatoarea. Dintre particularitatile acestui ceas amintesc: - afisarea orei si temperaturii, tranzitia acestora facandu-se prin efect de scroll; - formatul orei este 0-24; - punctul din fata orei indica daca alarma este on/off; - folosirea a 4 butoane: up, down, mod si alarma; - butonul mod selecteaza ce se afiseaza; - cu butoanele up si down se modifica ceea ce este afisat; - butonul alarma are doua functii: seteaza modul on/off al alarmei (si-l afiseaza pe display prin pct-ul dinaintea orelor) si opreste soneria atunci cand aceasta suna. - ceasul are doua moduri de afisare: doar a orei sau ora si temperatura selectabile din meniu prin setarea parametrului " ºC "; - reglarea intensitatii luminoase in 16 trepte prin setarea parametrului " Br "; - memorarea starii alarmei, a intensitatii luminoase si a modului de afisare, acestea nefiind afectate de interuperea alimentarii. Hex-ul necesar este urmatorul Ceas_MAX7219_PIC1824.hex Pentru cei ce vor sa adauge functionalitati noi sau sa foloseasca alt tip de PIC, progamul necesar facut in mikroBasic este: program Ceas_MAX7219_PIC1824 ' Declarations section Const cnfgww As Byte = %11010000 'Adress for write DS3231 Const cnfgwr As Byte = %11010001 'Adress for read DS3231 const MAX7219_TEST as byte =0x0F const MAX7219_BRIGHTNESS as byte = 0x0A const MAX7219_SCAN_LIMIT as byte = 0x0B const MAX7219_DECODE_MODE as byte = 0x09 const MAX7219_SHUTDOWN as byte = 0x0C const mxbt As Byte[11] =(0, 23, 59, 31, 12, 99, 59, 23, 59, 15, 1) ' max value const mnbt As Byte[11] =(0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0) ' min value const stadrs As Byte[11] =(0, 0x02, 0x01, 0x04, 0x05, 0x06, 0x00, 0x09, 0x08, 0x0B, 0x0D) ' Adress data RTC const alfabet as byte [16] [8]= (( 30, 63, 51, 51, 51, 51, 63, 30), '0 ( 6, 14, 30, 6, 6, 6, 6, 15), '1 ( 30, 63, 35, 6, 12, 24, 63, 63), '2 ( 30, 63, 35, 14, 14, 35, 63, 30), '3 ( 6, 14, 30, 54, 54, 63, 6, 15), '4 ( 62, 63, 48, 62, 51, 3, 63, 30), '5 ( 30, 63, 48, 62, 51, 51, 63, 30), '6 ( 63, 63, 3, 6, 12, 12, 12, 12), '7 ( 30, 63, 51, 30, 51, 51, 63, 30), '8 ( 30, 63, 51, 51, 31, 3, 63, 30), '9 ( 0, 0, 0, 0, 0, 0, 0, 0), 'blank ( 0, 3, 3, 0, 0, 3, 3, 0), 'dp (120, 124, 68, 64, 64, 68, 124, 120), 'C ( 56, 109, 109, 109, 57, 1, 1, 0), '` ( 62, 63, 51, 62, 51, 51, 63, 62), 'B ( 0, 0, 27, 31, 28, 24, 24, 24)) 'r Dim CS as sbit at RC3_bit 'Chip Select pin for MAX7219 CS_Direction as sbit at TRISC3_bit Dim Soft_I2C_Sda as sbit at RC5_bit 'SDA pin for DS3231 Dim Soft_I2C_Scl as sbit at RC4_bit 'SCL pin for DS3231 Dim Soft_I2C_Sda_Direction as sbit at TRISC5_bit Dim Soft_I2C_Scl_Direction as sbit at TRISC4_bit Dim i,j, x, y, yy, bright, m, s_, z_, u, dp, str as byte Dim k, k0, k1, k4, k5, al as byte Dim flgal, flsh, x0, x1, x5, flgint, pflgint as bit Dim ma, sa, za, uua, utmp, ztmp, stmp, ltmp, rtmp, mtmp as byte[8] Dim dsp, th_dsp, h_dsp as byte[32] Dim s0, s1, m0, m1, h0, h1, ah0, ah1, am0, am1 As Byte Dim d0, d1, mo0, mo1, y0, y1, th0, th1, br1, br0 As Byte Dim btset, btmod, btvar, btmp, grc As Byte sub function I2CR(dim byref adress as byte) as byte ' Read value from RTC Soft_I2C_Start() ' Issue start signal Soft_I2C_Write(cnfgww) ' Address DS3221 datasheet Soft_I2C_Write(adress) ' Go to adresa Soft_I2C_Start() ' Issue repeated start signal Soft_I2C_Write(cnfgwr) ' Address for reading R/W=1 result = Soft_I2C_Read(0) ' Read with NAK Soft_I2C_Stop() ' Stop end sub sub procedure I2CW(dim adress, value as byte) ' Write value in TRC Soft_I2C_Start() ' Issue start signal Soft_I2C_Write(cnfgww) ' Address Soft_I2C_Write(adress) ' Go to adresa Soft_I2C_Write(value) ' Write valoare Soft_I2C_Stop() ' Stop end sub sub procedure read_RTC() ' Read some data from RTC btmp=0x00 btmp=I2CR(btmp) 'sec s0 = btmp Mod 16 s1 = btmp / 16 btmp=0x01 btmp=I2CR(btmp) 'min m0 = btmp Mod 16 m1 = btmp / 16 btmp=0x02 btmp=I2CR(btmp) 'hour h0 = btmp Mod 16 h1 = btmp / 16 btmp=0x04 btmp=I2CR(btmp) 'day d0 = btmp Mod 16 d1 = btmp / 16 btmp=0x05 btmp=I2CR(btmp) 'mounth mo0 = btmp Mod 16 mo1 = btmp / 16 btmp=0x06 btmp=I2CR(btmp) 'year y0 = btmp Mod 16 y1 = btmp / 16 btmp=0x08 btmp=I2CR(btmp) 'almin am0 = btmp Mod 16 am1 = btmp / 16 btmp=0x09 btmp=I2CR(btmp) 'alhour ah0 = btmp Mod 16 ah1 = btmp / 16 btmp=0x11 btmp=I2CR(btmp) 'temp th0 = btmp Mod 10 th1 = btmp / 10 btmp=0x0B bright=I2CR(btmp) ' brightness br0 = bright Mod 16 br1 = bright / 16 btmp=0x0C al=I2CR(btmp) ' set alarm On/Off btmp=0x0F btmp=I2CR(btmp) ' flag alarm flgal=btmp.0 btmp=0x0D btmp=I2CR(btmp) ' Temperature On/Off grc=btmp end sub sub procedure maxCMD (dim address, value as byte) ' Send command to MAX7219 CS = 0 for i = 0 to 3 SPI_Write(address) '// Send address. SPI_Write(value) '// Send the value. next i CS = 1 end sub sub procedure max7219_init() ' Initialize MAX7219 maxCMD(MAX7219_TEST, 0x01) ' Test mode maxCMD(MAX7219_TEST, 0x00) ' Finish test mode maxCMD(MAX7219_DECODE_MODE, 0x00) ' Disable BCD mode maxCMD(MAX7219_BRIGHTNESS, bright) ' Use lowest intensity maxCMD(MAX7219_SCAN_LIMIT, 0x0f) ' Scan all digits maxCMD(MAX7219_SHUTDOWN, 0x01) ' Turn on chip end sub 'Prepare hour data sub procedure prepare_to_show_hour(dim m, s_, z_, u, dp1, al1 as byte) for i = 0 to 7 ma[i] = alfabet[m] [i] sa[i] = alfabet[s_] [i] za[i] = alfabet[z_] [i] uua[i] = alfabet[u] [i] next i for i = 0 to 7 utmp[i]=uua[i] next i for i = 0 to 7 utmp[i].7 =za[i].0 next i for i = 0 to 7 ztmp[i]=za[i]>>1 next i for i = 0 to 7 ztmp[i].6 = alfabet[10 + dp1] [i]. 0 ztmp[i].7 = alfabet[10 + dp1] [i]. 1 next i for i = 0 to 7 stmp[i]=sa[i]<<1 next i for i = 0 to 7 mtmp[i]=ma[i] next i mtmp[0].7=al1 for i = 0 to 7 h_dsp[i] = utmp[i] h_dsp[i+8] = ztmp[i] h_dsp[i+16] = stmp[i] h_dsp[i+24] = mtmp[i] next i end sub 'Prepare Temperature data sub procedure prepare_to_show_temp(dim z_, u as byte) for i = 0 to 7 za[i] = alfabet[z_] [i] uua[i] = alfabet[u] [i] next i for i = 0 to 7 mtmp[i] = za[i] >>1 next i for i = 0 to 7 stmp[i]=uua[i] next i for i = 0 to 7 stmp[i].7 =za[i].5 next i for i = 0 to 7 ztmp[i] = alfabet[13] [i] next i for i = 0 to 7 utmp[i] = alfabet[12] [i] <<1 next i for i = 0 to 7 th_dsp[i] = utmp[i] th_dsp[i+8] = ztmp[i] th_dsp[i+16] = stmp[i] th_dsp[i+24] = mtmp[i] next i end sub sub procedure temp2hour 'Scroll from temperature to hour for i = 0 to 7 th_dsp[i+24] = th_dsp[i+24] << 1 th_dsp[i+24].0 = th_dsp[i+16].7 th_dsp[i+16] = th_dsp[i+16] << 1 th_dsp[i+16].0 = th_dsp[i+8].7 th_dsp[i+8] = th_dsp[i+8] << 1 th_dsp[i+8].0 = th_dsp[i].7 th_dsp[i] = th_dsp[i] << 1 th_dsp[i].0 = h_dsp[24+i].7 h_dsp[i+24] = h_dsp[i+24] << 1 h_dsp[i+24].0 = h_dsp[i+16].7 h_dsp[i+16] = h_dsp[i+16] << 1 h_dsp[i+16].0 = h_dsp[i+8].7 h_dsp[i+8] = h_dsp[i+8] << 1 h_dsp[i+8].0 = h_dsp[i].7 h_dsp[i] = h_dsp[i] << 1 next i for i = 0 to 31 dsp[i] = th_dsp[i] next i end sub sub procedure hour2temp 'Scrool from hour to temperature for i = 0 to 7 h_dsp[i+24] = h_dsp[i+24] << 1 h_dsp[i+24].0 = h_dsp[i+16].7 h_dsp[i+16] = h_dsp[i+16] << 1 h_dsp[i+16].0 = h_dsp[i+8].7 h_dsp[i+8] = h_dsp[i+8] << 1 h_dsp[i+8].0 = h_dsp[i].7 h_dsp[i] = h_dsp[i] << 1 h_dsp[i].0 = th_dsp[24+i].7 th_dsp[i+24] = th_dsp[i+24] << 1 th_dsp[i+24].0 = th_dsp[i+16].7 th_dsp[i+16] = th_dsp[i+16] << 1 th_dsp[i+16].0 = th_dsp[i+8].7 th_dsp[i+8] = th_dsp[i+8] << 1 th_dsp[i+8].0 = th_dsp[i].7 th_dsp[i] = th_dsp[i] << 1 next i for i = 0 to 31 dsp[i] = h_dsp[i] next i end sub sub procedure up_down() 'Procedure for Button Up or Button Down if x0 = 1 then if btset = 6 then I2CW(btmod, 0) else btvar = I2CR(btmod) btvar = bcd2dec(btvar) if btvar = mnbt[btset] Then btvar = mxbt[btset] else btvar = btvar - 1 end if I2CW(btmod, dec2bcd(btvar)) end if x0 = 0 end if if x1 = 1 then if btset = 6 then I2CW(btmod, 0) else btvar = I2CR(btmod) btvar = bcd2dec(btvar) if btvar = mxbt[btset] Then btvar = mnbt[btset] else btvar = btvar + 1 end if I2CW(btmod, dec2bcd(btvar)) end if x1 = 0 end if end sub sub procedure prepare_2_show_data ' Prepare data for send to MAX7219 for i = 0 to 31 dsp[i] = h_dsp[i] next i end sub sub procedure send_2_display() ' Send data to MAX7219 for i = 0 to 7 CS = 0 ' Begin transfer. SPI_Write(i+1) ' Send address. SPI_Write(dsp[i+24]) ' Send the value. SPI_Write(i+1) ' Send address. SPI_Write(dsp[i+16]) ' Send the value. SPI_Write(i+1) ' Send address. SPI_Write(dsp[i+8]) ' Send the value. SPI_Write(i+1) ' Send address. SPI_Write(dsp[i]) ' Send the value. CS = 1 ' Finish transfer. next i end sub sub procedure show_data() ' Show received data prepare_2_show_data send_2_display() end sub sub procedure alarm ' Buzz if PORTC1 = 1 PORTC.1 =flgal and al.0 and PORTA.2 end sub sub procedure init_main() OSCCON = %11111111 ' MCU clock at 16 MHz ANSELA = %00000000 ' All I/O pins of the PORTA are configured as digital ANSELC = %00000000 ' All I/O pins of the PORTC are configured as digital CM1CON0 = %00000000 ' Disbale comparator CM2CON0 = %00000000 ' Disbale comparator TRISA = %11111111 ' PORTA All Inputs TRISC = %00000000 ' PORTC All Outputs APFCON0.SDOSEL = 0 APFCON0.SSSEL = 1 INTCON.GIE = 1 ' Enables all unmasked interrupts INTCON.PEIE = 0 ' Disables all peripheral interrupts INTCON.T0IE = 1 ' Enables the TMR0 interrupt INTCON.INTE = 1 ' Enables the RA2/INT external interrupt INTCON.IOCIE = 0 ' Disables the PORTA change interrupt INTCON.T0IF = 0 ' TMR0 register did not overflow INTCON.INTF = 0 ' The RA2/INT external interrupt did not occur INTCON.IOCIF = 0 ' None of the PORTA <5:0> pins have changed state OPTION_REG.WUE = 0 ' PORTA pull-ups are enabled by individual port latch values OPTION_REG.INTEDG = 0 ' Interrupt on rising/falling edge of RA2/INT pin OPTION_REG.T0CS = 0 ' set Timer0 clock source to internal OPTION_REG.T0SE = 1 ' Increment on high-to-low transition on RA2/T0CKI pin OPTION_REG.PSA = 0 ' asign prescaler to Timer 0 OPTION_REG.PS2 = 1 ' asign prescaler value OPTION_REG.PS1 = 1 ' asign prescaler value OPTION_REG.PS0 = 1 ' asign prescaler value WPUA = %00111111 ' Pull-ups PORTA to be enabled SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH) Soft_I2C_Init() ' Initialize I2C module SPI1_Init() ' Initialize SPI module btmp=0xB ' Set brtightness adress bright=I2CR(btmp) ' Read brtightness value grc=0 ' Read Temp_On/Off value btmp=0xC ' Set alarm on/off adress al=I2CR(btmp) ' Read alarm on/off value max7219_init() ' Initialize MAX7219 module PORTC.1 = 0 ' Do not start alarm on start_up I2CW(0xA,%10000000) ' Alarm when hours, minutes, and seconds match I2CW(0x0E,0) ' Square wave is output on the INT/SQW pin TRISC.1 = 0 ' Because SPI1_Init make PORTC1 as input str = 0 j = 0 y = 0 k = 0 x = 0 x0 = 0 x1 = 0 x5 = 0 flgint = 0 pflgint = 0 flgal = 0 dp = 0 btset = 0 CS=1 end sub sub procedure Interrupt() iv 0x0004 ics ICS_AUTO if INTCON.INTF = 1 then flgint = not flgint OPTION_REG.INTEDG = not OPTION_REG.INTEDG dp.0 = not dp.0 k = k + 1 if k = 23 then k = 0 end if INTCON.INTF = 0 End if if INTCON.T0IF = 1 then TMR0 = 61 if flgal and al.0 and porta.2 then end if y = y + 1 if y = 20 then flsh = not flsh y = 0 end if ' buton mod if Button(PORTA, 4, 1, 1) then k4 = 255 end if if k4 and Button(PORTA, 4, 1, 0) then btset = btset + 1 if btset= 11 then btset= 0 end if btmod = stadrs[btset] k4 = 0 end if ' Button Up if btset <> 0 then if Button(PORTA, 0, 1, 1) then k0 = 255 end if if k0 and Button(PORTA, 0, 1, 0) then k0 = 0 x0 = 1 end if end if ' Button Down if btset <> 0 then if Button(PORTA, 1, 1, 1) then k1 = 255 end if if k1 and Button(PORTA, 1, 1, 0) then k1 = 0 x1 = 1 end if end if ' Button Al On/Off if Button(PORTA, 5, 1, 1) then k5 = 255 end if if k5 and Button(PORTA, 5, 1, 0) then x5 = 1 k5 = 0 end if INTCON.T0IF = 0 End if end sub main: ' Main program delay_ms(100) init_main() while TRUE select case btset case 0 ' show alt hour & temperature if flgint <> pflgint then pflgint = flgint read_RTC() prepare_to_show_hour(h1, h0, m1, m0, dp, al ) prepare_to_show_temp(th1, th0) if grc = 1 then if k<=16 then if k=16 then dp = 1 prepare_to_show_hour(h1, h0, m1, m0, dp, al ) for yy = 0 to 31 hour2temp send_2_display() delay_ms(30) alarm() next yy else prepare_2_show_data send_2_display() alarm() end if else if k=22 then dp = 1 prepare_to_show_hour(h1, h0, m1, m0, dp, al ) for yy = 0 to 31 temp2hour send_2_display() delay_ms(30) alarm() next yy else prepare_to_show_temp(th1, th0) for i = 0 to 31 dsp[i] = th_dsp[i] next i send_2_display() alarm() end if end if else show_data alarm() end if end if case 1 read_RTC() if flsh = 0 then h1 = 10 h0 = 10 end if prepare_to_show_hour(h1, h0, m1, m0, 1, 0 ) show_data() up_down() case 2 read_RTC() if flsh = 0 then m1 = 10 m0 = 10 end if prepare_to_show_hour(h1, h0, m1, m0, 1, 0 ) show_data() up_down() case 3 read_RTC() if flsh = 0 then d1 = 10 d0 = 10 end if prepare_to_show_hour(d1, d0, mo1, mo0, 0, 0 ) show_data() up_down() case 4 read_RTC() if flsh = 0 then mo1 = 10 mo0 = 10 end if prepare_to_show_hour(d1, d0, mo1, mo0, 0, 0 ) show_data() up_down() case 5 read_RTC() if flsh = 0 then y1 = 10 y0 = 10 end if prepare_to_show_hour(2, 0, y1, y0, 0, 0 ) show_data() up_down() case 6 read_RTC() if flsh = 0 then s1 = 10 s0 = 10 end if prepare_to_show_hour(10, 10, s1, s0, 1, 0 ) show_data() up_down() case 7 read_RTC() if flsh = 0 then ah1 = 10 ah0 = 10 end if prepare_to_show_hour(ah1, ah0, am1, am0, 1, 1 ) show_data() up_down() case 8 read_RTC() if flsh = 0 then am1 = 10 am0 = 10 end if prepare_to_show_hour(ah1, ah0, am1, am0, 1, 1 ) show_data() up_down() case 9 read_RTC() if flsh = 0 then br1 = 10 br0 = 10 end if prepare_to_show_hour(14, 15, br1, br0, 1, 0 ) show_data() up_down() read_RTC() maxCMD(MAX7219_BRIGHTNESS, bcd2dec(bright)) case 10 read_RTC() if flsh = 0 then grc = 10 end if prepare_to_show_hour(13, 12, 0, grc, 1, 0 ) show_data() up_down() end select if x5 = 1 then x5 = 0 if al <> 0 then al = 0 else al = 1 end if while not k5.0 prepare_to_show_hour(ah1, ah0, am1, am0, 1, 1 ) show_data() wend I2CW(0xc,dec2bcd(al)) ' Alarm On/Off I2CW(0xf,dec2bcd(0x0)) ' Clear alarm flag end if alarm() wend end.
  6. Kreator

    Intrerupere INT PIC16F1824

    Multumesc @mars01 ca in totdeauna profesor doctor! Intradevar, eu vroiam sa sterg flagul pt intreruperea externa (INF) dar din neatentie stergeam bitul INTE (dezactivam intreruperea) Acum cu ajutorul tau merge OK! Multumesc mult!
  7. Kreator

    Intrerupere INT PIC16F1824

    Hi all! Ma confrunt cu urmatoarea problema la un PIC16F1824 si anume intreruperea INT (acea care se produce la schimbarea starii pinului RA2) nu se produce. Codul de initializare a PIC-ului este: sub procedure initiere() SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH) OSCCON = %11111111 ANSELA = %00000000 ' All I/O pins are configured as digital ANSELC = %00000000 CM1CON0 = %00000000 ' Disbale comparators CM2CON0 = %00000000 ' Disbale comparators TRISA = %11111111 ' PORTA All Inputs, Except xxx TRISC = %00000000 ' PORTC All Outputs WPUA = %00111111 ' Pull-ups to be enabled APFCON0.SDOSEL = 0 APFCON0.SSSEL = 1 INTCON.GIE = 1 ' Enables all unmasked interrupts INTCON.PEIE = 0 ' Disables all peripheral interrupts INTCON.T0IE = 1 ' Enables the TMR0 interrupt INTCON.INTE = 0 ' Enables the RA2/INT external interrupt INTCON.IOCIE = 0 ' Disables the PORTA change interrupt INTCON.T0IF = 0 ' TMR0 register did not overflow INTCON.INTF = 0 ' The RA2/INT external interrupt did not occur INTCON.IOCIF = 0 ' None of the PORTA <5:0> pins have changed state OPTION_REG.WUE = 0 ' PORTA pull-ups are enabled by individual port latch values OPTION_REG.INTEDG = 1 ' Interrupt on rising/falling edge of RA2/INT pin OPTION_REG.T0CS = 0 ' set Timer0 clock source to internal OPTION_REG.T0SE = 1 ' Increment on high-to-low transition on RA2/T0CKI pin OPTION_REG.PSA = 0 ' asign prescaler to Timer 0 OPTION_REG.PS2 = 1 ' asign prescaler value OPTION_REG.PS1 = 1 ' asign prescaler value OPTION_REG.PS0 = 1 ' asign prescaler value end sub sub procedure Interrupt() iv 0x0004 ics ICS_AUTO dp.0 = not dp.0 INTCON.INTE = 0 INTCON.T0IF = 0 end sub main: ' Main program initiere() while TRUE citire() prepare_to_show_hour(h1, h0, m1, m0, dp, al ) afiseaza() wend end. Pentru INTCON.T0IE = 1 si INTCON.INTE = 0 adica sa se produca evenimentul pt TMR0 totul e OK, programul functioneaza OK (dp isi schimba starea) deci programul e OK. Problema este la combinatia INTCON.T0IE = 0 si INTCON.INTE = 1 (adica la schimbarea starii lui RA2): dp nu-si schimba starea. Unde gresesc, sau ce nu am configutar OK? Va multumesc!
  8. Kreator

    ceas arduino+rtc+tm1637+encoder+dht cu alarma

    Cu asta ma joc acum, dar nu e terminat... Arduino, RTC, 4xMAX7219 dar in final va fi cu PIC688 ca nu stric un A. Nano pt un ceas BTW sunt module cu TM cu afisaj mare de '56
  9. Kreator

    DILEMA: Angajat la..''STAT'''sau la ...PRIVAT ???

    Ceva ce-mi vine repede in minte: un ceas elvetian poate costa cat un Logan (sau mai bine). Care e costul de productie al ceasului (materiale+salarii) si care e al Loganului.
  10. Kreator

    DILEMA: Angajat la..''STAT'''sau la ...PRIVAT ???

    Cand vad publicate cifre vizand indicatorii macroeconomici ma uit in general cine le-a publicat: daca sunt de la INS sau EUROSTAT sunt un pic mai credibile, daca sunt de la Comisia nationala de strategii si prognoza le privesc cu suspiciune fiindca stiu ca-s umflate de Valcov. Ca o analogie sunt ca watti masurati dupa standardul DIN si watii chinezesti. Apoi mai trebuie sa stim si metodologia de calcul aplicata adica care sunt datele prelucrate care au generat acele statistici. Turbez cand aud ca s-au facut de ex. 80.000 noi locuri de munca, dar asta nu inseamna ca s-au angajat 80.000 noi persoane din somaj sau care nu au lucrat niciodata. De ex o firma cu 50 salariati a fost bagata voit in insolventa, patronul a trecut activitatea pe alta firma cu tot cu angajati dar Valcov - PSD spune ca guvernarea lor a generat 50 noi locuri de munca. Acelasi lucru se intampla si cand de ex un mare lant de supermarketuri este cumparat (absorbit) de un al supermarket (de ex. Real de Auchan) la ITM apar in plus ca noi toate cele 5000 de locuri vechi de munca.Teoretic Valcov are dreptate dar in realitate nu s-a creat niciun nou loc de munca. Crestere economica de 5% (cea mai mare din UE) inflatie tot atata sau mai mare, cresterea economica ajustata (cea reala, bazata pe plusvaloarea productiei) e zero sau negativa. Cresterea salariului cu 50% a fost facuta artificial prin mutarea contributiilor dintr-un buzunar in altul) Atata timp cat cresterile salariale nu au la baza productivitatea muncii sau cresterea calitatii serviciilor publice prestate acestea vor genera numai deficit (de orice natura).
  11. Kreator

    DILEMA: Angajat la..''STAT'''sau la ...PRIVAT ???

    Alaltaieri spuneam asta Azi s-a confirmat. S-a postat pe siteul Min de finante accizele pentru 2019, acestea fiind actualizate cu rata inflatiei. Citat de pe economica.net "Accizele cresc din ianuarie, după o pauză de 2 ani. Scumpiri la carburanți, țigări, bere, electricitate."
  12. Kreator

    DILEMA: Angajat la..''STAT'''sau la ...PRIVAT ???

    Treaba sta in felul urmator: obligativitatea asigurarii salariului minim pe economie se aplica atat angajatilor de la stat cat si celor din mediul privat. Guvernantii aplica acesta masura pentru a aduce mai multi bani la bugetul de stat, chiar daca teoretic el cheltuie cu salariile celor de la stat, statistica arata ca doar o mica parte din angajatii de la stat au salariul minim pe economie, asadar sunt afectati doar angajatorii. Dar cum se aduc mai multi bani la buget? O cale este cea directa, prin sarcina fiscala aplicata angajatului sarcina fiscala care este de aproximativ 50% si care se duce direct in buget. O consecinta a maririi salariului minim pe economie e cresterea consumului (cei cu minim sigur nu economisesc) si de aici colectare indirecta de taxe prin TVA si impozit pe profit la comercianti. Si nu in ultimul rand, cresterea masei monetare aflata in circulatie genereaza inflatie si de aici cresc preturile , cresc si taxele din consum, se slabeste leul astfel valorile de referinta ale EUR la care se calculeaza gazele, kWh etc folosite la accize sunt mai mari si de aici mai multi bani la buget. Pana la urma aceasta crestere artificiala a costului muncii este in detrimentul chiar a celui care parea avantajat fiindca in cateva luni sporul de venit e absorbit sau mai rau, puterea lui de cumparare scade. Si mai sunt si alte consecinte...
×