Sari la conținut
ELFORUM - Forumul electronistilor

Invatat programare de la zero


Postări Recomandate

Nu stiu daca ai realizat dar listingul de mai sus nu este un exemplu de editare ci este o modificare pentru controllerul tau, cu watchdog-ul activ si cu implementarea solutiei de updatare a LCD-ului doar cand se schimba starea pompei si/sau a hidroforului.

 

Ce ii lipseste este posibilitatea de a schimba starea pompei asa cum ai mentionat tu ca vrei in postul #326.

Editat de mars01
Link spre comentariu

Salutare....am lasat de o parte vechiul proiect si lucrez la alta aplicatie:

 

Am o intrare ADC, 10 biti, prin care controlez iesirea unui PWM, de la 0...5V respectiv 0..duty100%. Partea asta am facut-o, insa as vrea sa pun pe afisaj duty, adica sa afisez cat la % este atunci PWM-ul sau tensiunea...am reusit sa fac un bargraf pe prima linie, de la 0..16, insa nu reusesc cu afisarea duty...rog un pic de ajutor

 

Link spre comentariu

Atasez codul...am cam rezolvat problema, insa am probleme cu bara de bargrapf...imi face refresh si se vede urat pe display...daca are cineva o idee?

#define buton_dir TRISC.F4      //butonul pe intrarea RC4
#define buton PORTC.F4
#define LCD_stff.c              //inserare date de iesire LCD

#define INPUT        1U         // input ca 1 unsignde
#define OUTPUT       0U         //output ca 0 unsigned

// enumeratie anonime pentru a salva diferite stari
enum
{
   OFF = 0,
   ON  = 1
};

 unsigned long int BarSegmentNum,Vin,Iin,amp,V,diff,pvmduty;
 char adcprint, i,m,duty=0;
 unsigned int  Displayvolt;
 const char character[] = {31,31,31,31,31,31,31,31};

//functie creare linii pe display pr bargrapf
void CustomChar(char pos_row, char pos_char)
     {
     char ip;
     Lcd_Cmd(64);
     for (ip = 0; ip<=7; ip++) Lcd_Chr_CP(character[ip]);
     Lcd_Cmd(_LCD_RETURN_HOME);
     Lcd_Chr(pos_row, pos_char, 0);
     }

//functie afisare procentaj(ex tensiune)
void tensiune()
{
    char op[12];
    char a,i,j,ch,lcd[6];
    Lcd_Out(2,1,"Speed=");              // Mesaj principal => linia a 1-a
    Vin= ADC_Read(0);                    // Citire ADC
      
        V = Vin/10;                  // Convertire rezultat in milivolti sau multiplu in functie de zecimale
        ch = V/1.02;                 // raport la numarul de biti 1020
        ByteToStr(ch,op);            //convertire pentru afisaj
        LCD_Out(2,7,op);             //afisare pe LCD
        LCD_Chr_CP('%');             // Afisare caracter 'V' la final
        Delay_ms(10);
 }
 
 //functie afisare bargrapf
 void bar()
 {
   Vin= ADC_Read(0);                  //citire ADC(acelasi ADC)
   if (diff != Vin)
        {
        Lcd_out(1,1,"                ");
        BarSegmentNum = Vin/(1023/16); // Calculate numbers of bar graph segments
        for (i=0;i<BarSegmentNum;i++)     // Loop to print each bar segment in second row
             {
              CustomChar(1,i+1);          // Print custom character for bargraph segment
             }
        {
        CustomChar(1,i-1);
        }
        }
       Delay_ms(100);                   // Stabilize LCD display
       diff = Vin;
}

void pvm()
{
   PWM2_Init(45000);//setare pwm la 5000hz
   PWM2_Start();
  // PWM2_Set_Duty(duty);//setare ciclu
   Vin= ADC_Read(0);
  //  delay_ms(10);
     PWM2_Set_Duty(Vin/4);
}

void page1()
{    
     //LCD_Out(2,5,"PWM duty");
     //tensiune();
     bar();
     tensiune();
     pvm();
}

 void main()
{
TRISA=1;
TRISA=0xFF;
//configurare afisaj
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
ADCON1=0x80;
for(;;)
       {
       page1();
       }
}
Link spre comentariu
  • 1 lună mai târziu...

Nu cunosc f bine asamblare si pentru aceasta trebuie sa caut pe net sintaxa instructiunilor (ceea ce nu am timp acum) dar in:

movlw 0xF00 

0xF00 este un cuvant pe 12biti. Controller-ul tau este pe 8bit. Nu stiu ce vrei sa faci acolo, dar daca vrei ca 4 pini sa fie INPUT si 4 pini sa fie OUTPUT atuci corect este:

movlw 0xF0

Ulterior, poti sa schimbi intre ele liniile:

bcf PORTB,0
bsf PORTB,0

In felul acesta poti vedea ca LED-ul tau (probabil conectat pe unul din pinii OUTPUT ai portului B) este activ.

 

Daca tot nu iti merge, verifica configurarea uC-ului, in special partea de oscilator (nu am citit datasheet-ul, poate ca nu este nevoie decat de registrii CONFIG, mai ales daca ai un cuartz extern).

Si daca acolo totul este OK atunci prb poate fi de la rutina ta de delay, delay8b.

Editat de mars01
Link spre comentariu
  • 2 ani mai târziu...

Buna ziua,

Daca sunteti in stare sa cititi acest topic si sa intelegeti ceva atunci probabil ca veti putea sa va creati propriul firmware.

Daca nu, atunci urmati recomandarile din text:

Citat

Kit-ul DRL - Daytime Running Lights poate fi obtinut de la autor, scriind la adresa [email protected]

 

Omul acela incearca sa creeze ceva, montajul la care faceti referire este unul comercial si daca pretul nu este nesimtit atunci cred ca este mai de bun simt sa il achizitionati de la el.

Link spre comentariu

Am incercat de nenumarate ori sa intru in contact cu autorul, dar nu raspunde la nici un fel de mesaj.
As plati si cuiva de pe forum care este dispus sa imi faca acest software.
''(...) Daca sunteti in stare sa cititi acest topic si sa intelegeti ceva atunci probabil ca veti putea sa va creati propriul firmware. '' Nu este o problema asta, dar fiindca o iau de la zero cine stie cand fi in stare sa imi fac propiul software. De aceea preferam niste ajutor/sfaturi sa stiu de unde sa incep. Deci, o sa incep sa ''frunzaresc'' acest topic. Multumesc.

Link spre comentariu

Nu ştiu dacă va fi dispus cineva să piardă timp ca să-ţi conceapă gratis un cod ce va fi folosit poate în scop comercial.Cred că e mai simplu şi ieftin să cumperi (30-60 Lei)un modul din ăla, sau să construieşti unul care nu e bazat pe microcontroller.Deşi ar fi destul de complicat să faci toate funcţiile fără controller, se poate face cu circuite logice CMOS...colegul Ticu, de exemplu ar putea să te ajute cu ceva de genul, dacă îl contactezi.

Editat de validae
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