Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zasto se PIC ugasi a treba da radi?

[es] :: Elektronika :: Mikrokontroleri :: Zasto se PIC ugasi a treba da radi?

[ Pregleda: 2545 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

voxi

Član broj: 67178
Poruke: 328
*.skaut.net.



Profil

icon Zasto se PIC ugasi a treba da radi?08.04.2008. u 22:48 - pre 195 meseci
Ovako napravio sam satni mehanizam sa ds1307 i to sve lepo radi. Stavio sam da mi preko rs232 porta saljie datum i vreme, medjutim nakon izvesnog vremena pic se ugasi. Nema striktnog vremena svaki put nekad se ugasi za 1min i 13s a nekad za 2min i kusur

Ovo je moje zaglavlje ali
Code:

#include <16F874.h>
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PC,errors)
 


zna li neko zbog cega se to desava ?
 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
*.static-fiber.styrion.net.



+9 Profil

icon Re: Zasto se PIC ugasi a treba da radi?09.04.2008. u 07:03 - pre 195 meseci
Voxi, Voxi,
Ako misliš da sebi pomogneš pomozi i nama.
Prikači šemo toga što si napravio, prikači fotografije toga što si napravio, prikači KOMPLETAN program
toga što si napravio.
Ovo je sada samo moja predpostavka.
Hardverska greška: uređaj vuče preveliku struju pa se stabilizator napona isključi usled pregrevanja.
Softverska greška: Program nije korektno napisan pa dolazi do "Stack Overflow" ili pokušavaš da nešto
upišeš izvan granica tabele i time uništavaš ostatak programa.

Znači napred sa informacijama, nismo gatare ;-)

P.S Gde nađe da prikačiš te sasvim nevažne stvari, to uopšte nije relevantno.
 
Odgovor na temu

Glogov_Kolac
Aleksandar Atanasovski
Nis

Član broj: 97920
Poruke: 101
77.46.219.*



Profil

icon Re: Zasto se PIC ugasi a treba da radi?09.04.2008. u 09:12 - pre 195 meseci
Da li se samo ugasi ili se resetuje?
 
Odgovor na temu

voxi

Član broj: 67178
Poruke: 328
*.skaut.net.



Profil

icon Re: Zasto se PIC ugasi a treba da radi?09.04.2008. u 12:07 - pre 195 meseci
Ufff bas sam pokvaren :)

Code:

#define RTC_SDA  PIN_C4
#define RTC_SCL  PIN_C3

#use i2c(master, sda=RTC_SDA, scl=RTC_SCL)

BYTE bin2bcd(BYTE binary_value);
BYTE bcd2bin(BYTE bcd_value);

void ds1307_init(void)
{
   BYTE seconds = 0;

   i2c_start();
   i2c_write(0xD0);      // WR to RTC
   i2c_write(0x00);      // REG 0
   i2c_start();
   i2c_write(0xD1);      // RD from RTC
   seconds = bcd2bin(i2c_read(0)); // Read current "seconds" in DS1307
   i2c_stop();
   seconds &= 0x7F;

   delay_us(3);

   i2c_start();
   i2c_write(0xD0);      // WR to RTC
   i2c_write(0x00);      // REG 0
   i2c_write(bin2bcd(seconds));     // Start oscillator with current "seconds value
   i2c_start();
   i2c_write(0xD0);      // WR to RTC
   i2c_write(0x07);      // Control Register
   i2c_write(0x80);     // Disable squarewave output pin
   i2c_stop();

}

void ds1307_set_date_time(BYTE day, BYTE mth, BYTE year, BYTE dow, BYTE hr, BYTE min, BYTE sec)
{
  sec &= 0x7F;
  hr &= 0x3F;

  i2c_start();
  i2c_write(0xD0);            // I2C write address
  i2c_write(0x00);            // Start at REG 0 - Seconds
  i2c_write(bin2bcd(sec));      // REG 0
  i2c_write(bin2bcd(min));      // REG 1
  i2c_write(bin2bcd(hr));      // REG 2
  i2c_write(bin2bcd(dow));      // REG 3
  i2c_write(bin2bcd(day));      // REG 4
  i2c_write(bin2bcd(mth));      // REG 5
  i2c_write(bin2bcd(year));      // REG 6
  i2c_write(0x80);            // REG 7 - Disable squarewave output pin
  i2c_stop();
}

void ds1307_get_date(BYTE &day, BYTE &mth, BYTE &year, BYTE &dow)
{
  i2c_start();
  i2c_write(0xD0);
  i2c_write(0x03);            // Start at REG 3 - Day of week
  i2c_start();
  i2c_write(0xD1);
  dow  = bcd2bin(i2c_read() & 0x7f);   // REG 3
  day  = bcd2bin(i2c_read() & 0x3f);   // REG 4
  mth  = bcd2bin(i2c_read() & 0x1f);   // REG 5
  year = bcd2bin(i2c_read(0));            // REG 6
  i2c_stop();
}

void ds1307_get_time(BYTE &hr, BYTE &min, BYTE &sec)
{
  i2c_start();
  i2c_write(0xD0);
  i2c_write(0x00);            // Start at REG 0 - Seconds
  i2c_start();
  i2c_write(0xD1);
  sec = bcd2bin(i2c_read() & 0x7f);
  min = bcd2bin(i2c_read() & 0x7f);
  hr  = bcd2bin(i2c_read(0) & 0x3f);
  i2c_stop();

}

BYTE bin2bcd(BYTE binary_value)
{
  BYTE temp;
  BYTE retval;

  temp = binary_value;
  retval = 0;

  while(1)
  {
    // Get the tens digit by doing multiple subtraction
    // of 10 from the binary value.
    if(temp >= 10)
    {
      temp -= 10;
      retval += 0x10;
    }
    else // Get the ones digit by adding the remainder.
    {
      retval += temp;
      break;
    }
  }

  return(retval);
}


// Input range - 00 to 99.
BYTE bcd2bin(BYTE bcd_value)
{
  BYTE temp;

  temp = bcd_value;
  // Shifting upper digit right by 1 is same as multiplying by 8.
  temp >>= 1;
  // Isolate the bits for the upper digit.
  temp &= 0x78;

  // Now return: (Tens * 8) + (Tens * 2) + Ones

  return(temp + (temp >> 2) + (bcd_value & 0x0f));
}



Code:

#include <16F874.h>
//#device adc=8
//#fuses NOWDT,WDT128,HS, NOPROTECT, NOOSCSEN, BROWNOUT, BORV20, NOPUT, STVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOWRTB, NOWRTC, NOCPD, NOCPB, NOEBTR, NOEBTRB
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PC,errors)
//#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include <ds1307.c>

void main()
{
  BYTE sec=0;
  BYTE min=0;
  BYTE hrs=0;
  BYTE day=0;
  BYTE month=0;
  BYTE yr=0;
  BYTE dow=0;

  ds1307_init();
  OUTPUT_BIT(PIN_A0,1);




  // Set date for -> 15 June 2005 Tuesday
  // Set time for -> 15:20:55
  ds1307_set_date_time(8,4,8,2,23,25,0);

  while(1)
  {
    delay_ms(1000);

    ds1307_get_date(day,month,yr,dow);
    ds1307_get_time(hrs,min,sec);

    printf("\f\%02d/\%02d/\%02d\r\n",day,month,yr);
    printf("\%02d:\%02d:\%02d", hrs,min,sec);
  }
}



Sema je ta da RTC_SDA-> PIN_C4 ide na pin SDA->broj 5 na ds1307 a RTC_SCL PIN_C3 id na pin 6. Oscilator je stavljne na x1 i x2 sout->pin7 o Vbat->pin3 si slobodni.

Otpornici od 4.7k su vezani na pisn SDA i SCL kao na sledecem linku http://users.tpg.com.au/gramo/Site/proton_ds1307.htm, to jest 2 pull up otpornika

Jos imam samo komunikacija preko rs232 koja dobro radi i ide preko max232 pa na PC koristim zanaci hardversku realizaciju protokola. To je sto se tice seme.

A procersor se ugasi jer na pinu A0 sam stavio diodu u seriju sa 4.7k otpornikom gde se ona ugasi nakon izvesnot vremena to jest i kad vise ne salje na rs232 podatke o trenutnom vremenu!

Mislim da sam sad dobro obajasnio ako nisam javite sta da popravim!

A zaglavlje sam samo kopiro jer tamo moze da se navede koje su konfiguracione reci postavljene ;)

 
Odgovor na temu

voxi

Član broj: 67178
Poruke: 328
*.skaut.net.



Profil

icon Re: Zasto se PIC ugasi a treba da radi?09.04.2008. u 12:35 - pre 195 meseci
I jos nesto stabilizator je L7805cv ima izlaz do 1.5A i malo se sasvim zagrije tako da nije do stabilizatora, jre kad na nejga uklucim jos LCD i 1 senzor e onda se bas zagrije ;) a u ovom kodu nisu ukljucene te komponente
 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
84.119.0.*



+9 Profil

icon Re: Zasto se PIC ugasi a treba da radi?09.04.2008. u 19:57 - pre 195 meseci
Citat:
A procersor se ugasi jer na pinu A0 sam stavio diodu u seriju sa 4.7k otpornikom gde se ona ugasi nakon izvesnot vremena to jest i kad vise ne salje na rs232 podatke o trenutnom vremenu!


Je li A0 Tx izlaz od UART-a ili se taj pin samo programski uključuje kao ovde:
Code:
OUTPUT_BIT(PIN_A0,1);

Ako ovom gore funkcijom uključuješ LED-icu, a ona se posle nekog vremena "sama" ugasi to pokazuje da je program "pao" ili
da se nalazi u reset stanju gde su mu svi pinovi visokoomski pa je zbog toga diodica"ugašena".
Kao što rekoh: DAJ ŠEMU ILI FOTOGRAFIJU onog što si napravio, možda se radi o hardverskoj grešci.
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Zasto se PIC ugasi a treba da radi?

[ Pregleda: 2545 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.