Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[AVR BASCOM] Program do wagi - obliczenia.

KoLi86 19 Paź 2009 11:41 3033 16
  • #1 19 Paź 2009 11:41
    KoLi86
    Poziom 9  

    Napisałem programik do wagi, obsługuje przetwornik ac w AtMega8 :

    Code:

    $regfile = "m8def.dat"
    $crystal = 8000000


    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5
    Dim I As Byte



    Config Adc = Single , Prescaler = Auto , Reference = Avcc   'ustawianie przetwornika AC

    'Config Timer0 = Timer , Prescale = 64             'ustawienie licznika dla przerwań co 2ms
    'Enable Interrupts                                 'odblokowanie przerwań
    'Enable Timer0                                     'odblokowanie przerwania od Timer0
    'On Timer0 Petla Nosave                            'po przepełnieniu licznika skocz do etykiety o nazwie Petla

    '*************************    deklaracja zmiennych  ****************************
    Dim Wart_ac As Word                                         'zmienne konwersji pomiaru
    Dim V As Single                                             'zmienne konwersji pomiaru
    Dim Wart_nap As String * 3                                  'zmienne konwersji wyświetlania
                                              'zmienne konwersji wyświetlania
                                       'zmienna licznika wyświetlacza LED

    'Dim Flaga As Bit

    Start Adc                                                   'start przetwornika A/C

    Do
    Wart_ac = Getadc(1)

    Cls
    Lcd Wart_ac

    Lowerline
    V = Wart_ac * 0.0049

    Wart_nap = Fusing(v , "#.&&")

    Lcd "Waga=   "
    Lcd Wart_nap
    Lcd "kg  "
    Waitms 1000
    Loop
    End


                                                            'koniec programu


    Program ładnie działa, mam tylko pytanko czy muszę jeszcze coś dopisać oby przeliczyć wartość na kilogramy, czy wystarczy to co jest??

    A drugi problem to nie wiem czy programowy, mam problem z czułością ważenia od 0.3kg ładnie działa ale poniżej jest już znacznie gorzej.

    Z góry bardzo dziękuje za pomoc

    Poprawiłem tytuł, dodałem znaczniki [code].
    [zumek]

  • #2 19 Paź 2009 13:08
    KoLi86
    Poziom 9  

    Na wejściu przetwornika mam podawany sygnał z wzmacniacza pomiarowego od 0 do 5v. sygnał ten podłączyłem od przetwornik ac w Atmega 8 i napisałem programik z ac. Jednak nie wiem jak przeliczyć tą wartość na kg

  • #3 19 Paź 2009 16:57
    Freddy
    Poziom 43  

    Jaki używasz przetwornik. Podaj typ.
    W jego danych katalogowych powinny być podane przeliczniki.
    Drugi sposób, połóż odważnik 1kg i zmierz napięcie na wyjściu przetwornika.

  • #4 19 Paź 2009 19:58
    emarcus
    Poziom 34  

    Freddy napisał:
    Jaki używasz przetwornik. Podaj typ.
    W jego danych katalogowych powinny być podane przeliczniki.
    Drugi sposób, połóż odważnik 1kg i zmierz napięcie na wyjściu przetwornika.


    To nie jest "Drugi sposób"...
    To powinno znalezc sie w procesie kalbracji, ale w nieco rozszerzonej formie.
    1. usredniony wynik z co najmniej 5 pomiarow dla pelnego zakresu wagi;
    2. j/w dla polowy zakresu wagi;
    3. j/w dla 1/4 zakresu wagi.
    4. dokonac odpowiedniej korekty w programie jezeli wystepuje niezgodnosc wynikow albo nieliniowosc pomiaru przy kalibracji.
    Program powinien zawierac skladnie tak aby korekte kalibracji mozna wprowadzic bez zmiany calosci pamieci flash; np. jeden lub dwa parametry w eeprom programowane podczas 'run time' (calibration mode/tryb kalibracji).
    Paremetry te powinny byc odczytywane zawsze przy starcie programu (boot urzadzenia wagowego).
    W zaleznosci od przeznaczenia wagi, jej czestosci uzywania, nalezy takze sprecyzowac czestosc/okresowosc powtarznia kalibracji.

    e marcus

  • #5 19 Paź 2009 20:26
    KoLi86
    Poziom 9  

    używam przetwornika Atmega 8, a nie zewnętrznego . W załączniku dodałem notę od Atmegi


    Załącznik usunąłem, a autora postu zobowiązuję do zapoznania się z regulaminem, a w szczególności z pkt 10.10
    [zumek]


    co do załącznika i odsyłacza to nie zrobiłem tego aby zarabiać punktów tylko aby ułatwić wyjaśnianie problemu.

    Dodano po 11 [minuty]:

    Co do kalibracji to została ona przeprowadzona na wzmacniaczu pomiarowym. A nie chodzi mi o programowe tarowanie wagi bo tak to wygląda. Tylko o wyjaśnienie jak programowo mogę ustalić wartość jaka wychodzi mi z przetwornika ac ATMEGA8 16PU, na Kg. Napisałem programik. W tej posatci przy ustawieniu 1 kg pokazuje mi się 1 ale nie wiem czy mogę to traktować jako 1 kg czy 1 v i tu liczę na pomoć

  • Pomocny post
    #6 20 Paź 2009 02:00
    netotron
    Poziom 26  

    Programik w porządku z małym ale

    Wart_ac = Getadc(1)
    Wart_ac = Getadc(1) ' dwa razy to samo zalecam
    i
    V = Wart_ac * 0.004884 ' też zalecam

    Jeśli nie zależy ci na czasach kolejnych odczytów to zalecane jest odczekać > niż 20ms przed kolejnym pomiarem z ADC

    Wart_ac = Getadc(1)
    Waitms = 50
    Wart_ac = Getadc(1)

    to od strony programowej, teraz od elektroniki:
    - Filtrowanie napięcia na wejściu przetwornika ( szczególnie masa!)
    - długość przewodów i ekranowanie!!!!
    - Porządna stabilizacja zasilania
    - zalecam też zewnętrzne źródło nap. odniesienia np. LM 385
    w celach testowych wyświetl sobie na LCD-ku czystą zmienną z ADC zobaczysz jak jest stabilna.

    powodzenia

  • #8 20 Paź 2009 08:21
    KoLi86
    Poziom 9  

    Kolego Freddy nie rozumiem twojego pytania używam przetwornika analogowo-cyfrowego AtMegi8, który ustawia się programowo. A jeśli chodzi o całość to czujank tensometryczny KM200, wzmacniacz pomiarowy AT 5210N "Spice", Zl2avr z AtMega8 16PU.

  • #9 20 Paź 2009 08:23
    Freddy
    Poziom 43  

    Cytat:
    czujnik tensometryczny KM200, wzmacniacz pomiarowy AT 5210N
    No właśnie o to mi chodziło. Fakt, nie pisałem, że chodzi o przetwornik pomiarowy. Myślałem, że to oczywiste.

  • #10 20 Paź 2009 08:31
    KoLi86
    Poziom 9  

    Właśnie,że rozmawiamy cały czas o przetworniku ADC wiec nie za bardzo zrozumiałem o co chodzi :)

  • #11 20 Paź 2009 15:22
    emarcus
    Poziom 34  

    KoLi86 napisał:


    Co do kalibracji to została ona przeprowadzona na wzmacniaczu pomiarowym. A nie chodzi mi o programowe tarowanie wagi bo tak to wygląda. Tylko o wyjaśnienie jak programowo mogę ustalić wartość jaka wychodzi mi z przetwornika ac ATMEGA8 16PU, na Kg. Napisałem programik. W tej posatci przy ustawieniu 1 kg pokazuje mi się 1 ale nie wiem czy mogę to traktować jako 1 kg czy 1 v i tu liczę na pomoć


    Wdze ze nie zrozumiales o czym napisalem.
    "Tarowanie" przeprowadza sie w odniesieniu TYLKO do wag mechanicznych gdzie wszystko jest stale, (pomijamy zmiany temperaturowe dlugosci ramion), wystarcza sprawdzic "ZERO" bez obciazenia i reszta obrachunku jest w pamieci operatora wagi.
    Wagi i inne urzadzenia tensometryczne MUSZA byc kalibrowane!
    To co ty nazywasz "kalibracja na wzmacniaczu....." to jest tylko wstepny dobor, dopasowanie poziomu napiecia pomiedzy wyjsciem z celi tensometrycznej a wejsciem do ADC. Wyjsciem z ADC jest cyfrowa wartosc (zalezna od rozdzielczosci) i wynosi zazwyczaj od 0 do 1023 proporcjonalny do napiecia wejsciowego.
    I teraz, zaleznie czym jest twoj objekt pomiarowy stosujesz do tej wartosci odpowiedni wspolczynnik aby uzyskac sensowny wynik mierzonej wartosci. Moga to byc V, A, KG, KGm, itd.
    Jezeli twoj wynik wynosi "1", to jest to z pewnoscia bledny odczyt bo oczekujesz wyniku w postaci np; "1.xx" - zgodnie z zadanym w programie formatem.
    Na razie tyle wyjanienia.

    e marcus

  • #12 20 Paź 2009 15:44
    atom1477
    Poziom 43  

    A w ogóle to zamiast CLS lepiej użyć Locate. LCD będzie mniej migał.

  • #13 20 Paź 2009 17:51
    KoLi86
    Poziom 9  

    Przepraszamemarcus ale chyba mnie nie zrozumiałeś napisałem 1 sądząc iż jest to jasne ze wynosi 1.00 tak jak to wymaga program. A chodzi mi o to, CZY WYSTARCZA to CO napisałem w programie czy muszę jeszcze coś dopisać aby wartość końcowa była w kg

  • Pomocny post
    #14 20 Paź 2009 19:09
    emarcus
    Poziom 34  

    KoLi86 napisał:
    Przepraszamemarcus ale chyba mnie nie zrozumiałeś napisałem 1 sądząc iż jest to jasne ze wynosi 1.00 tak jak to wymaga program. A chodzi mi o to, CZY WYSTARCZA to CO napisałem w programie czy muszę jeszcze coś dopisać aby wartość końcowa była w kg


    Nie, nie potrzeba ci nic wiecej jezeli masz liniowy odczyt w calej rozpietosci zakresu pomiarowego.
    Mozesz wprowadzic dodatkowa zmienna np.'Wart_nap2' -jako kncowa wartosc i porownywac ja z poprzednia 'Wart_nap', i jezeli sa one rozne to nadpisac ta ostatnia i wtedy wyslac do display nadpisujac poprzednia informacje uzywajac:
    Locate.........
    zamiast Cls
    Unikniesz ciaglego cyklicznego przepisywania (bez potrzeby) display, a zatem wyeliminujesz "mruganie". Nie bedzie tez potrzebne 'Waitms 1000' w obsludze LCD.

    e marcus

  • #15 20 Paź 2009 19:29
    KoLi86
    Poziom 9  

    Bardzo dziękuje. Mam tylko prośbę czy mógłbyś mi ta komende Locate pokazać na przykładzie mojego programu. Program napisałem na podstawie książki, i niestety nie widze w niej tego polecenia. Byłbym bardzo wdzięczny

  • Pomocny post
    #16 20 Paź 2009 19:41
    atom1477
    Poziom 43  

    Code:

    Cls

    Do
    Wart_ac = Getadc(1)

    Locate 1,1
    Lcd Wart_ac

    V = Wart_ac * 0.0049

    Wart_nap = Fusing(v , "#.&&")

    Locate 2,1
    Lcd "Waga=   "
    Lcd Wart_nap
    Lcd "kg  "
    Waitms 1000
    Loop
    End

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME