logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Bascom: Błędy przy użyciu FUSING dla dwóch portów ADC jednocześnie

knmp 01 Sty 2006 16:06 1944 6
REKLAMA
  • #1 2135972
    knmp
    Poziom 26  
    Posty: 751
    Pomógł: 85
    Ocena: 31
    Witam

    Pytanie natury technicznej...

    Przedstawiam wycinek programu, odczyt z 2 portów adc konwersja i potrzeba wyświetlenia wyniku pomiaru w formacie 0.00.
    Zauważyłem problem pojawiący się gdy w programie występują dwie instrukcje FUSING pracujące niezaleznie nad rożnymi danymi... coś mi sie zdaje że instrukcja FUSING korzysta ze zmiennych wewnętrznych i dwukrotne wykonanie tej instrukcji powoduje błedy w wyświetlaniu wyniku
    Jeden wynik jest jakby połączony z drubim i wyświetlony jednocześnie, natomiast gdy zamienie kolejność instrukcji z procedurą FUSING ginie jeden wynik. Bład ten występuje w symulacji i w układzie... stos i ramka raczej są ok

    poniżej kod programu

    $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 = Portb.6

    Config Adc = Single , Prescaler = Auto , Reference = Avcc

    Cls

    Lcd "Power ON"

    Wait 1

    Cls

    Dim Adc_v As Word
    Dim Adc_i As Word

    Dim V As Single
    Dim I As Single
    Dim D As Single

    Dim Napiecie As String * 3
    Dim Prad As String * 3

    Start Adc

    Do

    Adc_v = Getadc(2)
    Adc_i = Getadc(3)

    V = Adc_v * 0.0049
    I = Adc_i * 0.0049

    Napiecie = Fusing(v , "#.##")
    Prad = Fusing(i , "#.##")


    Lcd Prad
    Lowerline
    Lcd Napiecie

    Waitms 100
    Cls


    Loop

    End

    czy istnieje możliwośc wykorzystanie dwukrotnie instrukcji fusing bez błedu ???
  • REKLAMA
  • Pomocny post
    #2 2136013
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Niestety , to nie błąd Bascoma tylko Twój.Pewnie z chytrości ;) , zadeklarowałeś "za krótkie" zmienne STRING.
    
    Dim Napiecie As String * 3 'zadeklarowano 3 znaki
    Dim Prad As String * 3      'j/w
    ...
    Napiecie = Fusing(v , "#.##") 'próba "upchnięcia" 4 znaków
    Prad = Fusing(i , "#.##")       'j/w
    ...
    


    Piotrek
  • REKLAMA
  • #3 2136064
    knmp
    Poziom 26  
    Posty: 751
    Pomógł: 85
    Ocena: 31
    ok, no tak przecinek... wstyd się przyznawać :)

    dzięki bardzo za szybka odpowiedz.
  • REKLAMA
  • #4 2136118
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    knmp napisał:
    ok, no tak przecinek... wstyd się przyznawać :)

    dzięki bardzo za szybka odpowiedz.

    Doradzam , by dla tak prostych obliczeń jak również niewielkiej pamięci programu , zpomnieć o istnieniu SINGLE i FUSING - no chyba że potrzebne Ci są super dokładne dane(zaokrąglenia).Szkoda flsh'a ;)
    Można np.
    
    $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 = Portb.6
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Cls
    Lcd "Power ON"
    Wait 1
    Cls
    Dim Adc_v As Word
    Dim Adc_i As Word
    Dim V As Word
    Dim I As Word
    Dim Napiecie As String * 5
    Dim Prad As String * 5
    Start Adc
    Do
       Adc_v = Getadc(2)
       Adc_i = Getadc(3)
       V = Adc_v * 49
       I = Adc_i * 49
       V = V / 100
       I = I / 100
       Napiecie = Str(v)
       Prad = Str(i)
       Napiecie = Format(napiecie , "0.00")
       Prad = Format(prad , "0.00")
       Lcd Prad
       Lowerline
       Lcd Napiecie
       Waitms 100
       Cls
    Loop
    
    End
    

    Piotrek
  • #5 2136535
    knmp
    Poziom 26  
    Posty: 751
    Pomógł: 85
    Ocena: 31
    super dokładne wyniki nie są aż tak wymagane... w sumie to zasilacz i odczyt napięcia i prądu. Potwierdzam, wiem, że funkcja fusing zabiera sporo flasha i przygotowałem już w zanadzu podobną do Twojej funkcję wykorzystującą str i format... mniejszy kod fakt ! Byłem ciekaw co szło nie tak z tym fusing stąd ten post.

    Szukam po helpie informacji odnośnie dodatkowej konfiguracji Getkbd() i Config Kbd... czy orientujesz się czy ta funkcja pozwala na konfigurację pinów do których można podłaczyć klawiaturę 4x3 tak, że wykorzystwane by były zarówno piny z portu d i b. Config kbd daje się konfigurowac po całych portach np PORT.D.. ja mam tak zaprojektowaną pcb, że chciałbym wykorzystać 4 piny z portu d i 3 piny z portu b, czy jest taka mozliwość ???

    dzieki za zainteresowanie
    Krzysztof
  • REKLAMA
  • #6 2136617
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    knmp napisał:

    ... Config kbd daje się konfigurowac po całych portach np PORT.D.. ja mam tak zaprojektowaną pcb, że chciałbym wykorzystać 4 piny z portu d i 3 piny z portu b, czy jest taka mozliwość ???

    dzieki za zainteresowanie
    Krzysztof

    Niestety :| Pozostaje samemu oprogramować , "niestandardowo" podłączoną klawiaturę.

    Piotrek
  • #7 2261674
    knmp
    Poziom 26  
    Posty: 751
    Pomógł: 85
    Ocena: 31
    ok zasilacz zaprojektowany soft napisany i wszystko działa... czas zamknąc temat

    dzieki zumek za pomoc

    pozdr KN

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono problem z użyciem funkcji FUSING w Bascom AVR podczas jednoczesnej konwersji i wyświetlania wyników z dwóch portów ADC. Problem polegał na błędach w wyświetlaniu wyników, spowodowanych prawdopodobnie niewłaściwą deklaracją zbyt krótkich zmiennych typu STRING dla wyników formatowanych przez FUSING. Zalecano zwiększenie długości zmiennych STRING, aby pomieścić formatowane dane. Alternatywnie zasugerowano rezygnację z funkcji SINGLE i FUSING na rzecz prostszych operacji arytmetycznych i formatowania za pomocą funkcji STR i FORMAT, co zmniejsza zużycie pamięci flash i jest wystarczające dla mniej dokładnych pomiarów, takich jak odczyt napięcia i prądu z zasilacza. Poruszono także temat konfiguracji klawiatury 4x3 w Bascom, gdzie standardowa funkcja CONFIG KBD pozwala na konfigurację tylko całych portów, a niestandardowe połączenia pinów z różnych portów wymagają własnej implementacji oprogramowania. Ostatecznie autor potwierdził poprawne działanie zaprojektowanego zasilacza i oprogramowania.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA