Sari la conținut
ELFORUM - Forumul electronistilor

Problema program


Postări Recomandate

Nu dati cu batul...codul de mai sus l-am modificat din alt cod ,si tinind cont ca acum 5 luni nu stiam ce inseamna

 

 

 "Delay_ms(1000);" 

e cred (dupa mine ) ca totusi am evoluat , iar unde m-am poticnit am cerut ajutorul ,sunt constient ca mai am mult de citit si de invatat

:aplauze Multumesc

Link spre comentariu
  • Răspunsuri 25
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Vizitator pic32

Un cod care ocupa mai putina memorie. (nu-i verificat dar eu cam asa zic eu ca trebuie scris)

Sa vedem ce parere mai au si altii.

Daca tot vrei sa inveti, incearca sa traduci:

 

 

#define max_adc 820sbit LCD_RS at RB1_bit;sbit LCD_EN at RB3_bit;sbit LCD_D4 at RB4_bit;sbit LCD_D5 at RB5_bit;sbit LCD_D6 at RB6_bit;sbit LCD_D7 at RB7_bit;sbit LCD_RS_Direction at TRISB1_bit;sbit LCD_EN_Direction at TRISB3_bit;sbit LCD_D4_Direction at TRISB4_bit;sbit LCD_D5_Direction at TRISB5_bit;sbit LCD_D6_Direction at TRISB6_bit;sbit LCD_D7_Direction at TRISB7_bit;char sir_low[] ="  LOW ";char sir_charging[]="CHARGING";char sir_charged[] ="CHARGED ";char *sir_status;char str_percent[4];unsigned int adc_rd, diff;unsigned char percent;void main(){  INTCON = 1;  TRISA = 0x03;    Lcd_Init();  Lcd_Cmd(_LCD_CLEAR);  Lcd_Cmd(_LCD_CURSOR_OFF);  Lcd_Out(2,8,"BATTERY");    ADC_Init();    while(1)  {    adc_rd = ADC_Get_Sample(0);    if (diff != adc_rd)    {      diff = adc_rd;      percent=adc_rd*100/max_adc;            if(percent<20)    sir_status=sir_low;      else if(percent<90)  sir_status=sir_charging;      else        sir_status=sir_charged;      ByteToStr(percent,str_percent);      Lcd_out(1,1,str_percent);      Lcd_out(1,4,"%");      Lcd_out(1,7,sir_status);    }    Delay_ms(1000);  }} 

Link spre comentariu

Structurat cam asa arata cum l-ai scris da nu merge corect in cazu asta. Nu face corect conversia din valoarea ADC in procente. Daca inmultesti o variabila pe 10bit cu 100 numaru rezultat sare de 65535, deci ai nevoie de variabila de tip long.

Io i-am lasat programu cu if-uri imbricate ca nu am inteles dc are de la 90% la 100% diferenta jumate fata de restu intervalelor.

 

#define max_adc 778sbit LCD_RS at RB1_bit;sbit LCD_EN at RB3_bit;sbit LCD_D4 at RB4_bit;sbit LCD_D5 at RB5_bit;sbit LCD_D6 at RB6_bit;sbit LCD_D7 at RB7_bit;sbit LCD_RS_Direction at TRISB1_bit;sbit LCD_EN_Direction at TRISB3_bit;sbit LCD_D4_Direction at TRISB4_bit;sbit LCD_D5_Direction at TRISB5_bit;sbit LCD_D6_Direction at TRISB6_bit;sbit LCD_D7_Direction at TRISB7_bit;char sir_low[] ="  LOW ";char sir_charging[]="CHARGING";char sir_charged[] ="CHARGED ";char *sir_status;char str_percent[4];unsigned int adc_rd, diff;unsigned char percent;unsigned long tmp;void main(){   INTCON = 0;   TRISA = 0x03;   Lcd_Init();   Lcd_Cmd(_LCD_CLEAR);   Lcd_Cmd(_LCD_CURSOR_OFF);   Lcd_Out(2,8,"BATTERY");   ADC_Init();   while(1)   {   adc_rd = ADC_Get_Sample(0);   if (diff != adc_rd)   {   diff = adc_rd;   tmp=(unsigned long)adc_rd*100;   tmp=tmp/max_adc;   percent =(char)tmp;   if(percent>=100) percent=100;     if(percent<20)   sir_status=sir_low;   else if(percent<90)   sir_status=sir_charging;   else   sir_status=sir_charged;   ByteToStr(percent,str_percent);   Lcd_out(1,1,str_percent);   Lcd_chr_cp('%');   Lcd_out(1,7,sir_status);   }   Delay_ms(1000);   }}

Editat de ventzel
Link spre comentariu

Tensiunea de la bornele acumulatorului o iei prin divizor rezistiv? Daca da ar trebui sa modifici un pic limitele minim si maxim din program.

Ce acumulator ai? Pb? Pentru asta ii cel mai greu de stabilit gradu de incarcare strict numa dupa tensiunea lui la borne. Din ce stiu trebe sa tii cont daca ii pe incarcare sau descarcare si incarcarea ar fi bine sa fie compensata cu temperatura si oprita la gassing voltage.

http://www.scubaengineer.com/documents/lead_acid_battery_charging_graphs.pdf 

http://www.tekrispower.com/pdfs/xantrex/Batteries%20-%20Temperature%20Compensated%20Charging.pdf

O metoda fara pretentii mari ar fi sa consideri la 0% cand tensiunea la borne ii sub 10V si 100% cand ii peste 13.8V.

 

Link spre comentariu

10% am considerat atunci cand am bateria sub  10,4 V

100% am considerat intre 13,6V - 13,8V,cand am depasit 13,8v imi apare "CHARGED", un releu (momentan, vreau sa schimb cu mos-fet) imi cupleaza un consumator .

da ,tensiunea o iau prin divizor rezistiv,si accumulator  de la Sunlight.

interesant al 2-lea link

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări