Odpowiedz 
 
Ocena wątku:
  • 3 Głosów - 3.33 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Programowanie w języku C w środowisku AVR Studio4
SP4EJT Offline
Marcin
****

Liczba postów: 340
Dołączył: 06-05-2011
Post: #161
RE: Programowanie w języku C w środowisku AVR Studio4
(07-06-2012 9:57)SP3GTG napisał(a):  „Własna” synteza z AD 9951 bardzo cieszy, choć
trzeba ją jeszcze rozbudować o różne funkcje niezbędne
w TRx-ie.
Nie ma sprawy tak tez zrobimy. Jednak z obsługą encodera będzie problem gdyż go nie posiadam - jeśli ktoś ma na zbyciu solidny, najlepiej z jakiejś obrabiarki CNC za niewielkie pieniądze to mogę kupić.
Tym razem proponuję opracować "normalne" wyświetlanie częstotliwości - w postaci xxx.xxx.xxx ( np. 3.710.000 ) Oto moja propozycja funkcji wys_freq()
Kod:
void wys_freq(unsigned long int freq)
{
    unsigned long int LL, ff, zero;
    LL=0;
    ff=freq;
    LCD_PORT = LCD_PORT|(1<<LCD_RS);

    while(ff >= 100000000)
        {
          ff = ff-100000000;
          LL+=1;
         }
    if (LL!=0)                 //wyťwietl rz?d 100M
        {
          bajt_lcd(LL+48);
          zero=1;
         }
    else
        {
          bajt_lcd(LL+32);
          zero=0;
         }
    LL=0;
    while(ff >= 10000000)
         {
        ff = ff-10000000;
           LL+=1;
         }
    if (LL!=0)                 //wyťwietl rz?d 10M
        {
          bajt_lcd(LL+48);
          zero=1;
         }
    else
         {
          if(zero==0)
              {
               bajt_lcd(32);
               zero=0;
              }
          else
              {
             bajt_lcd(LL+48);
               zero=1;
              }
         }
    LL=0;
    while(ff >= 1000000)
        {
        ff = ff-1000000;
           LL+=1;
         }
    if (LL!=0)             //wyťwietl rz?d 1M
        {
          bajt_lcd(LL+48);
          bajt_lcd(46);
          zero=1;
         }
    else
        {
          if(zero==0)
              {
               bajt_lcd(32);
               bajt_lcd(32);
               zero=0;
              }
          else
              {
            bajt_lcd(LL+48);
            bajt_lcd(46);
            zero=1;
            }
         }
    LL=0;
    while(ff >= 100000)
        {
        ff = ff-100000;
           LL+=1;
         }
    if (LL!=0)                 //100k
        {
        bajt_lcd(LL+48);
        zero=1;
        }
    else
         {
          if(zero==0)
              {
               bajt_lcd(32);
               zero=0;
              }
          else
              {
               bajt_lcd(LL+48);
               zero=1;
              }
         }
    LL=0;
    while(ff >= 10000)
        {
        ff = ff-10000;
           LL+=1;
         }
    if (LL!=0)                 //10k
        {
          bajt_lcd(LL+48);
          zero=1;
         }
    else
        {
          if(zero==0)
              {
               bajt_lcd(32);
               zero=0;
              }
          else
              {
               bajt_lcd(LL+48);
               zero=1;
              }
         }
    LL=0;    
    while(ff >= 1000)
        {
        ff = ff-1000;
           LL+=1;
         }
    if (LL!=0)             //1k
        {
        bajt_lcd(LL+48);
        bajt_lcd(46);
        zero=1;
        }
    else
        {
          if(zero==0)
              {
              bajt_lcd(32);
               bajt_lcd(32);
               zero=0;
              }
          else
              {
               bajt_lcd(LL+48);
               bajt_lcd(46);
               zero=1;
              }
         }
    LL=0;
    while(ff >= 100)
        {
          ff = ff-100;
          LL+=1;
         }
    bajt_lcd(LL+48);                //100
    LL=0;
    while(ff >= 10)
        {
          ff = ff-10;
          LL+=1;
         }
    bajt_lcd(LL+48);                //10
    bajt_lcd(ff+48);                //1
}
Opracowałem ją kiedyś - nie miałem jeszcze na tyle doświadczenia żeby zrobić krótki kod - zresztą to nie ważne ( moim zdaniem) żeby mało było kodu w oknie kompilatora tylko ważne żeby program wykonywał się szybko a ten sposób wyświetlania jest szybszy niż ten który mieliśmy do tej pory.
Z pliku main.c usuwacie całą funkcję wys_freq() i na jej miejsce wsadzacie tą którą podałem w tym poście. Działa - sprawdzałem... lecz ciągle jest coś nie tak Smile i to jest zadanie dla Was:
Jak zrobić żeby częstotliwość nie wychodziła poza wyświetlacz ?? Pogłówkujcie , jeśli nie dacie rady podam rozwiazanie. Podpowiedź: Wystarczy zmienić (tylko) góra dwa znaki.
(Ten post był ostatnio modyfikowany: 10-06-2012 19:06 przez SP4EJT.)
10-06-2012 19:06
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 10-06-2012 19:06

Skocz do:


Użytkownicy przeglądający ten wątek: 17 gości