Po konwersji część ułamkowa zostaje "utracona". Zmienna przyjmuje wartość jedynie części całkowitej bez zaokrąglenia, czyli: 2,9 (single) po konwersji na integer to 2
Najprościej to użyć overlay w sram. Single to 4 bajty w pamięci. dim zmienna_single as single dim bajt1 as byte at zmienna_single overlay dim bajt2 as byte at zmienna_single+1 overlay dim bajt3 as byte at zmienna_single+2 overlay dim bajt4 as byte at zmienna_single+3 overlay Potem zapisujesz bajty do eeprom, odczytujesz kiedy chcesz i masz wynik w single.
Nawet nie tyle nie jest liczbą binarną, co zmienne o typie zmiennopozycyjnym są zapisywane w postaci mantysy i wykładnika. A że mantysa ma skończoną długość to pewnych wartości nie da się dokładnie przechować. Typowo taka zmienna ma 32 bity, stąd można przechowywać 2^32 różnych liczb, jako, że single ma pewnie coś koło +/-10^38 to dostrzegasz problem?
No zajrzałem do noty ale nadal zachodzę w głowę dlaczego używasz do tego zaraz tak kosmicznego nieporozumienia jak liczby zmiennoprzecinkowe w Bascomie albo w ogóle na AVR. Najlepiej zawsze od nich uciekać jak tylko się da - a można to często bardzo łatwo zrobić - tą ucieczkę ;) szczególnie w takich prostych przypadkach: masz tam przykładowy wzrór z...
Zmienna = -Zmienna ?
No bo zmiennej I2_single przypisujesz wartość całkowitą. I2 jest przecież bez części ułamkowej.
Widzę, że Kolega został nieco jakby bez pomocy :) Kodów niestety nie posiadam nadających się do analizy. Wszystko jednak dość jasno opisane jest w helpie: https://wiki.mcselec.com/bavr/CONFIG_ADC... Trzeba tylko szukać pod hasłem CONFIG ADCX, bo CONFIG ADC jest dla AtMega.
Niestety, inaczej nie sformatujesz single. Zapis zmiennej z przecinkiem jest dość skomplikowany (mantysa, wykładnik) i znalezienie przecinka nie jest prostą sprawą. Jakie działania potrzebujesz wykonać na single? Może nie trzeba jej używać. Wykonałem próbę w symulatorze najpierw single na string za pomocą fusing(), potem z powrotem na single za pomocą...
Nie używałem nigdy BASCOMa, ale chyba powinno się dać w nim zrobić coś takiego: wynik = round(liczba*100)/100
Moze zmien algorytm tych obliczen. Wydaje mi ze ze jak po "Do" zrobisz od razu: [syntax=basic4gl]For Cykl = 1 To Y Z = ( Cykl * X ) \ Y Prc = ( 100* Cykl ) \ Y Call Oblicz Next Cykl[/syntax] to bedziesz mial co potrzebujesz i to bez uzywania single Nie znam dobrze Bascom, wiec jak nie mozna robic tylu operacji w jednej linii to dodaj zmienna pomocnicza...
Może Frac ?
Pomnóż przez 2, zaokrąglij do wartości całkowitych, podziel przez 2, i wyświetl z rozdzielczością do 1 miejsca po przecinku.
Nie możesz mnożyć liczby byte i stałej ułamkowej. W tym przypadku zmienna "Kolor_temp" musi być typu single.
Chyba nie czytałeś ostatnio tego rozdziału z Language Fundamentals. W ten sposób sam sobie robisz kuku... Pomijając to myślę, że jeśli te Twoje zmiennoprzecinkowe masz tylko do dwóch miejsc po przecinku, to dlaczego, po prostu, nie pomnożysz tego x100 a na końcu wyniku nie podzielisz /100? Zapewne wszystko się wykona dużo szybciej niż na tych zmiennoprzecinkowych....
W symulatorze możesz sprawdzić czy program nie nadpisuje stosu. Komunikat pokazuje się w dolnej części okna symulatora "Frame or software stack overlap", można też sprawdzić w zakładce "uP". Jeżeli nadpisało stos ustawiasz wartości dla stosów na początku programu np.: [syntax=basic4gl]$hwstack = 32 $swstack = 16 $framesize = 32 [/syntax]
Może można to inaczej rozwiązać, ale jako pierwsze do głowy przychodzi coś takiego: [syntax=vbnet] Dim A As Byte Dim B As Byte Dim C As Single A = 123 B = 255 C = A * 1000 ' c=123000 C = C + B ' c = 123255 C = C / 1000 ' c =123,255 [/syntax] ..tylko przemyśl czy nie lepiej dokonywać obliczeń na tych 123255 i na samym końcu wynik podzielić przez 1000....
Źle definiujesz typ zmiennych. Żeby można wykonywać operacje zmiennoprzecinkowe, typ zmiennych powinien być single lub double. Dim Dawka_temp As Single, Dawka As Single
hmmm a czytales tą instr progr do bascoma ze stronki mcselec? o ile mnie pamiec nie myli to gdzies w poczatkowych stronach bardzo precyzyjnie ktos opisal tą czynnosc....
Możesz, to zrobić tak: Dim zmienna as single Dim part1 as byte at zmienna overlay Dim part2 as byte at zmienna+1 overlay Dim part3 as byte at zmienna+2 overlay Dim part4 as byte at zmienna+3 overlay Odebrane dane uartem wrzucasz kolejno do zmiennych 'part' w efekcie zapełniając 4bajty zmiennej 'zmienna' typu single.
- powyżej 10W: "Pwej= Tak będzie się wyświetlało jeżeli pierwszym bajtem zmiennej String Pwej będzie 0. Zero jest końcem łańcucha (dwie możliwości takiego błędu już podałem stos, albo nadpisanie przez inny łańcuch ;)). Nie piszesz też jaka wersja Bascoma to jest, może w którejś wersji był błąd z funkcją Fusing. Możesz podglądnąć co się dzieje z Pwej...
Kol. _Matik_ określił przyczynę problemu, ja natomiast chciałem zasugerować rozwiązanie. W Bascomie jest instrukcja ROUND(x). Sądzę, że to jest najprostsze wyjście.
Long = GetAdc(0) Single = Long * 0.01955 String = Fusing(Single, "##.##") LCD String; "V"
Najwidoczniej Tzap1 ma '-'. Może to pomoże (popatrz na 31 bit): http://en.wikipedia.org/wiki/Single_prec...
Problem już chyba rozwiązany. Wystarczyło wyrzucić z timera fragmenty obliczeń i wstawić je np. do jakiejś deklaracji/podprogramu. Program teraz wygląda tak i jak na razie wszystko działa i poprawnie się wyświetla: [syntax=basic4gl]'---PROCESOR-----------... $regfile = "m128def.dat" $crystal = 16000000...
musze przyznać, że i tak dostałeś bardzo duże zbliżenie... Do twoich celów najlepszym sposobem i najpewniejszym będzie użycie zaokrąglenia. Pewnie bascom posiada tą funkcję.
Tylko stosując arytmetykę stałopozycyjną, czyli rezygnując z typu float single itp.
Poczytaj helpa o funkcjach Fusing i Format.
Witam!!! Mam problem z dodawaniem zmiennej single a mianowicie Dim test as single test = 0 do locate 1,1 lcd test Debounce Pinc.5 , 0 , A , Sub loop A: test = test + 0.1 i jak nacisnę przycisk raz to zamiast być 0.1 wyświetla 0.09999996 Dlaczego tak się dzieje??
Witam, Proszę o podpowiedź jak zapisać zmienną typu single, konkretnie wartość np. 1.23458 do komórek pamięci eeprom. Chodzi o zapis w Bascomie. Jeżeli wpiszę dim zmienna as single zmienna= 1.23458 Writeeeprom zmienna , 1 to przy odczycie Readeeprom zmienna , 1 na lcd ukazuje się 1.234580037
Człowieku! Po co ci zmienne typu Single do liczenia kroków! Zastosuj Long jak już chcesz mieć zmienne 4 bajtowe.
witam jak w temacie, czy bascom obsluguje tylko single end'ed czy takze wej roznicowe adc? bo w help nie widze :((( pzdr.
Jaki błąd popełniam ze zmiennymi? Taki że zadeklarowałeś je jako Single.
Witam, Mam pytanie... Jak zamienić zmienną Integer na Single w Bascom AVR?? Pytam, ponieważ muszę użyć funkcji: X = Fusing(ds1 , "#.##") a zmienna ds1 mam typu integer. Pozdrawiam A.
No to pytanie dlaczego w ogóle chciałeś użyć zmiennej Single?
Jak w bascomie ze miennej typu single wydobyc liczbe po przecinku i wpisac ja do zmiennej byte ?? Przyklad jest liczba single np 12,34 i teraz chce wpisac to co po przecinku (czyli 34) do zmiennej byte Z gory dzieki za pomoc
Jaki jest R1, i jak ustawione fuse? Spróbuj zmienić na ADC(5) np. Zmień jeszcze na V as Single.
Bascom operuje bezpośrednio na rejestrach. Poczytaj DS co i gdzie trzeba poustawiać, a potem czytaj wynik też prosto z rejestrów. Nie używaj getadc. To polecenie działa tylko w trybie single i o ile wiem wykonuje konwersję zawsze dwa razy zwracając wynik drugiego pomiaru. Wtedy o szybkości max nie ma co mówić.
Ale - dla stringu "84.2" otrzymuję wartość zmiennej 84.199996946 Niestety rozdzielczość zmiennych typu Single jest skończona i nie można w nich zapisać każdej liczby zmiennoprzecinkowej. Jak sądzę, jest to problem konwersji do single - czy jest jakiś sposób, aby otrzymać tą wartość dokładnie taką jak w stringu ? Jeśli masz dużo pamięci RAM to zastosuj...
I tu też by dobrze chodziło, ale działania na zmiennych rzeczywistych (w Bascomie - Single) zajmują bardzo dużo miejsca a prawie zawsze można te obliczenia dokonać na zmiennych całkowitych (np. tak jak w tym przykładzie).
wprowadzasz zmienną temperatura2 as single wyswietlanie: if temparatura<>temperatura2 then temperatura2=temperatura LCD .... end if return
Ale zacząć należy w ogóle od uruchomienia tego a dopiero później optymalizować. Prześledź w symulacji co po kolei dzieje się z wartościami zmiennych. Na moje oko winę za zły wynik ponosi za małą dokładność zmiennych typu Single.
Zamiast liczyć coś na floatach (typ Single w BASCOMie) to licz na integerach (tyle że dane trzeba będzie przeskalować w górę aby mieć symulacje części ułamkowej). Od razu co najmniej 1KB mniej ze względu na brak bibliotek do floatów, ze 2 razy mniej kodu na każde wywołanie funkcji, 10 razy szybsze działanie no i mniejsze zużycie RAMu. Program w EEPROMie...
Domyślam sie że to jest BASCOM. GetAdc(x) - funkcja wykonuje pomiar na nodze ADCx. Czyli dobrze myślisz. Pozdrawiam Yakuza Edit: Tylko pamiętaj że przetwornik musi pracować w trybie SINGLE.
Zaokrąglenia single... na LCD. Powiem szczerze ze pomysłów mi już brakło. Spróbuj więc takiej funkcji: CONFIG SINGLE = SCIENTIFIC , DIGITS =1 co obcina zbędne miejsca zmiennej 'single' do jednego miejsca po decimal point. Zamiast 1 może byc dowolna wartośc w zakresie 1 do 7. albo jak wyżej "FUSING". e marcus
Nie wystarczy po prostu zadeklarować zmienna jako single ? Z mojego doświadczenia wynika że można i ze to bez problemu działa i że wystarczy polecenie zmienna = wartość żeby zapisać i tak samo odczytać przez proste wskazanie zmiennej - nie ma potrzeby zawracania sobie głowy adresem - to tylko bascom ;)
Witam Czy potrafi któryś z was przekonwertować taki fragment kodu w BASCOM na C (Atmel Studio 6) ? Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc
To sięgnij po" fusing" dla single i "format" dla reszty.
Przepływomierz na litr podaje 648 impulsów jak napisać kod bascom żeby zliczał litry litry = impulsy / 648 Litry mają być typu single.
Przy przepisywaniu danych masz jeden błąd, pierwsza dana z linii DATA nie zostanie przepisana do tablicy. Numeracja elementów w tablicy DIM zaczyna się od 1, a numeracja elementów danych pobieranych przez Lookup zaczyna się od 0 :) . W BASCOMIE od wersji 2.0.0.0 można zmienić w jaki sposób będą numerowane elementy w tablicy DIM: A gdybym chciał przechowywać...
Nie będę sie rozpisywał: Dim T1 As Single , T2 As Integer ... T1 = -123.50 T2 = T1 'bez części ułamkowej T2 = Round(T1) 'zaokrągli zgodnie z prawami arytmetyki ... Pozdrawiam Piotrek
Długość geograficzna to: 5045.0221,N Szerokość geograficzna to: 01619.7181,E Odwrotnie: szerokość N lub S, długość E lub W. szerokoscstopnie = Mid(dane,14,2) szerokoscminutyisekundy = Mid(dane,16,7) Szerokosc = Val(szerokoscminutyisekundy) Szerokoscminutyisekundy = Szerokoscminutyisekundy / 60 Proszę o pomoc To może tak: szerokoscstopnie...
To zapisz do single pomnóż i przepisz do byte.
Stosowanie GETADC jest możliwe w trybie SINGLE przetwornika, a nie FREE.
To może taki kolorowy obrazek z LCD ;) Deklarujesz tablicę czterech bajtów Arr(4) As Byte Na tę tablicę poprzez Overlay nakładasz Single Ładujesz swoje cztery bajty po kolei do tablicy Arr(1) - Arr(4) a wyświetlasz Single. Proste jak świński ogon ;) https://obrazki.elektroda.pl/3578008500_...
instrukcja wykonuje się, ale nie jest w ogóle brany pod uwagę ten drugi warunek x < 5000... instrukcja wykonuje się jeśli x>500, ale jeśli x jest ponad 5000 to niestety też się wykonuje... nie wiem jak to ugryźć, czytałem w necie że nie tylko ja mam taki problem Dodano po 8 x jest zadeklarowana jako single
zapis writeeeprom zmienna , adres odczyt readeeprom zmienna , adres Musisz pamiętać ile bajtów zajmuje zmienna którą zapisujesz i o taką wartość zwiększyć adres przy zapisie / odczycie następnej zmiennej Jeśli zmienne typu Byte , adres zwiększasz o 1 Jeśli zmienne typu Word , adres zwiększasz o 2 Jeśli zmienne typu Integer , adres zwiększasz o 2 Jeśli...
Nie używałem "Noise Cancel" więc nie wiem czy ma wpływ - ale usuń Timer1 = 54477 W bascomie single może płatać figle zamień na typ LONG ( profilaktycznie ) Częstotliwość = 1000000/Licznik Dla 1 Hz powinieneś otrzymać wynik 1000 Wprowadź zmienną Policzone typu bit. w pętli głównej Do policzone = 0 wait 2 f= 1000000 / f lcd f loop w przerwaniu Licz: if...
... Może ktoś wie jak to zrobić bez sztucznego sprawdzania i dopisywania końcówek. PL Ja chyba wiem ;) 'dla Frm = 0 , kompiluje Fusing() 'dla Frm = 1 , kompiluje Format() 'teraz mozna porównać "pamięciożerność" Const Frm = 0 Dim A As Single , B As Integer , C As String * 10 A = 1.1625 B = A * 10 #if Frm C = Str(b)...
proponuje lekturę pomocy: "Word (two bytes). Words are stored as unsigned sixteen-bit binary numbers ranging in value from 0 to 65535. " ;) użyj single lub double
A zadeklarowałes zminną us jako single tak jak kolega M. S. napisał :?:
Jeszcze tylko jedno pytanie. Co Ci nie pasuje w tym ... równaniu ? (1* 256 +145)*0.0625 = 25.0625 Podstawą programowania mikrokontrolerów(i nie tylko) jest znajomość arytmetyki i to nie tylko na liczbach dziesiętnych ale również na liczbach binarnych i hexadecymalnych(szesnastkowych). Bez tego, ani rusz kolego :D Przecież taki kod (01000001110010001000000000000000)BIN...
Jeżeli to ma nic nie robić tylko generować impulsy, to po prostu może użyj Waitms. A jeżeli nie, zmieniaj wartość porównania w zależności od dodatkowej zmiennej. Np: $regfile = "m16def.dat" $crystal = 16000000 Dim A As Word 'Zmienna zwiększana i porównywana. Dim B As Byte 'Zmienna decydująca z jaką wartością będzie porównywana zmienna A. Config...
Hej! Zobaczcie jak ja to robię, może komuś sie to przyda: 'Powiedzmy ze zmienna Liczba(single) wynosi 22.62555426 Temp = Int(liczba) ' dzieki temu poleceniu odcinam czesc setna czyli ' zmiennej Temp(byte) przypisuje liczbę 22 Liczba = Frac(liczba) ' dzieki temu poleceniu odcinam czesc ' dziesiętną czyli zmiennej Liczba(single) przypisuje ' liczbe 0.62555426...
Problem już rozwiązany dzięki koledze Niveasoft Przy deklaracji etykiety przerwania od ADC należało dodać SAVEALL ponieważ w przerwaniu używam zmiennych typu Single. Reszta szczegółów w helpie.
Czy jest możliwy błąd podłączenia? Tutaj oczywiście zmieniłem na PB.1 Tak, wszystko jest możliwe... Spróbuj ten code: [syntax=basic4gl] 'DS18B20 - ROM reading test from single sensor DS18B20 $regfile = "m8adef.dat" $crystal = 4000000 $hwstack = 80 $swstack = 80 $framesize = 40 Config 1wire = Portb.1 'Config 1wire = Portd.5 Dim N As Byte Dim Dsid1(8)...
Witaj. Poniżej poprawiony program, przy którym kompilator nie melduje błędów. Było ich kilka. Przypomina mi się taka łamigłówka - "Znajdź 10 różnic na 2 rysunkach" :) Tyle nie było. Poprawności wyświetlania na LCD nie sprawdzałem, ale poprawiłem tak, aby był sens w wyświetlanych danych. Jak go podłączysz, to sprawdzisz. $regfile = "m8def.DAT"...
Tłumaczenie pierwszego kodu. W drugim to wiadomo, że brak biblioteki ;) Mogłem się gdzieś machnąć bo pisałem w przerwie pomiędzy innymi zadaniami. Dodałem tam sobie funkcję b w funkcjach mogę deklarować Local`s które nie są później potrzebne w Global`s. [syntax=vbnet]$regfile = "m2560def.dat" '8K SRAM | 4K EEPROM $crystal = 16000000 $hwstack = 256 $swstack...
Hmm- nie rozumiem. Przerwanie jest sprzętowe- co 2ms. Oczywiście nie wiem jak długo Bascom wykonuje operacje na single- pewnie długo. I operacje na LCD- też długo- chociaż wielokrotnie szybciej niz bez odczytu RW. Sugerujesz że inkrementację należy robić w przerwaniu? Dobrze- ale z drugiej strony obsługa przerwania ma być krótka. Jak zrobić żeby ten...
raczej floaty w Bascomie zastosuję Single, czyli zmienną która może przechowywać dowolną zmienną stało lub zmiennoprzecinkową pojedynczej precyzji. Tak się zastanawiam, o ile procent FFT jest szybsza od DTF z tego kodu: http://obrazki.elektroda.pl/1228143400_1... ? Może [jak nie wiele] to warto zastosować DTF /prostszy dużo algorytm/?
Przepraszam , ale te F na końcu to sam tutaj dopisałem , żeby było wiadomo ze to nie Celcjusze :) . Dane odbieram w terminalu . atmega32 ---> ft232rl ---> terminal :) W chwili obecnej dim T1 As single
Siemka! Musisz wziąść pod uwagę fakt, iż zmienna single przechowuje wartości zmiennoprzecinkowe ze skończoną dokładnością i to może być zauważalne przy niektórych operacjach na tego typu zmiennych. Poszukaj w helpie od Bascoma i poczytaj o kodowaniu liczb zmiennoprzecinkowych i wszystko Ci się wyjaśni:) Pozdrawiam!! Widzę że dałeś kod.:) Mi się wydaje...
...Gdy z terminala wysyłam 2 to procek zwraca mi 50 gdy 1 to 49 gdy 3 to 51 itd Pewnie gdyby a była single to by było O.K. "Kłaniają się" typy zmiennych. Kiedy do terminala wpiszesz 2 , to po łączu szeregowym do uC , jest wysyłany kod ASCII cyfry 2 , czyli dziesiętnie 50.Instrukcja print , "przetwarza" owe 50 na ciąg znaków ASCII reprezentujących liczbę...
Problem może być ... sprzętowy. Otóż Tiny2313 fabrycznie ma ustawiony zegar na 8MHz i preskaler zegara na podział przez 8 czyli pracuje na 1MHz. Jeśli nie manipulowałeś z Tinką to nie będzie zgodna rzeczywista częstotliwość taktowania uC z zadeklarowaną w programie. Magistrala 1Wire jest bardzo wrażliwa na czas poszczególnych impulsów i nie zniesie...
operacje na single zajmują więcej pamięci ( tracisz cenne miejsce na kod ) . Jeśli w pętli 100 razy wykonasz operacje na zmiennej SINGLE to na pewno będzie to wykonywane znacznie dłużej niż na zmiennej WORD . Dlatego do uśrednienia weź dane w postaci WORD lub LONG ( zmienna Wo czyli wartość odczytana ) , również porównania wartości rób na tych typach...
W BASCOM-ie jest wiecej takich niuansow. Odkrywanie odpowiedzi na takie dziwne pytania jest czasami bardzo denerwujace... W helpie jest cos napisane a w praktyce bywa ze dziala odrobine inaczej albo i calkiem inaczej... Jakis czas temu glowilem sie nad dokladnie tym samym problemem. Wymyslilem jaka jest odpowiedz z czego bylem bardzo dumny :-) Ponizej...
próbowałem tylko ze to musi być wtedy typu single bo word nie przyjmuje zmiennoprzecinkowej liczby czyli nie da sie pomnoży razy 10 próbowałem tez pozmieniać wszystkie typy na single ale też nie poszło
Napięcie masz z zakresu 0... 10 V . Dzielnikiem rezystancyjnym dzielisz przez 2 Rezystory > 10kOhm W Bascomie : Config Adc = Single , Prescaler = 16 , Reference = Avcc Napięcie zasilające jest u mnie napięciem odniesienia. Dla moich zastosowań wystarczająca dokładność
spróbuj tak : Config Adc = Single , Prescaler = Auto Start Adc Dim N0 As Word N0 = Getadc(0) w N0 masz wartość napięcia gdzie 1023 to 5V a 0 to 0V
Kod po kompilacji w takiej postaci jak teraz w wersji 2.0.4.0 zajmuje 89%. Zyskasz więcej rezygnując ze zmiennych single. Nie analizuje czy kod jest poprawny.
Histereza jest zadeklarowana jako Single. Zmień to na Integer bo szkoda miejsca. Po tym ustaw Histereza = 20 i powinno jakoś działać. Temperatura 60st.C to u Ciebie I1 = 600 a przecinek jest dorysowywany funkcją Format. Dlatego różnica stopnia to różnica równa 10 a nie jeden.
Zmienna typu SINGLE i komenda FUSING.
Jak zwykle zumek zaskakuje pozytywnie :D T1 ma być jako integer a T2 jako single.
Po pierwsze: Używasz wewnętrznej pamięci, więc pamiętaj o żywotności cyklów zapisu/odczytu. Jest zalecenie, aby czynności związane z wewnętrzną pamięcią nie wkładać do pętli. Po drugie: Zainteresuj się zewnętrznymi pamięciami na I2C. To są moje wycinki kodu do regulatora PID: To w nagłówku: $eeprom 'Informacja dla procesora o korzystaniu z pamięci EEPROM...
Witam, Jeśli nie musisz nie korzystaj ze zmiennych typu single, lepiej przeskalować int'a kilka razy (np zamiast 1,232 robisz 1232 a przy wyświetlaniu dodajesz przecinek) operacje na liczbach zmiennoprzecinkowych zjadają spora flash i czasu procesora. Pozdrawiam, Marcin
Przy odczycie takiego czyjnika możesz uzyskać max 99,9 , więc po co zmienna single. Po prostu dla wyniku np 22,5 stC wyliczasz liczbę 225 a później robisz: [syntax=basic4g] calkowite = wyliczonazmienna / 10 dziesietne = wyliczonazmienna mod 10 i pomiędzy wstawiasz kropkę na wyświetlaczu[/syntax]
ad. freddie: sugerujesz, żeby nie korzystać z bascom? ad balu: wielkie dzięki!!! zmianiłem jednego single na byte i... 5%!!!! do przodu. Skąd to sie bierze? single to zgodnie z instrukcją 4 bajty, dodałem za todla tesu 4 zmienne typu byte i nie podskoczyło nawet o jeden %? Macie jeszcze jakies propozycje?
Witam wszystkich serdecznie i dziękuję za pomoc w rozwiązaniu problemu. Chciałbym przeprosić za moje bezmyślenie. Po sugestii frediego zacząłem kombinować z tymi rezystorami przy wzmacniaczu wyjściowym. Skończyło się tym, że wstawiłem potencjometr wieloobrotowy 10K i uzyskałem to co chciałem. Tak więc polecam ten układ do przekładników z małą modyfikacją...
Nikt nie jest w stanie mi pomóc? nie wie wiem dla czego kontroler nie porównuje wartości Rozumiem że jesteś początkujący , ale nawet Ty powinieneś wiedzieć , że nie porównuje się zmiennej binarnej(Us) ze stringiem (Tmp) :( To tak , jak byś porównywał kilogram z czerwonym :D Poza tym , ten program jest niezwykle pamięciożerny(Fusing,Single). Jeśli ten...
"single"-zajmuje cztery bajty - a Ty wykorzystujesz jeden. Więc nie single a byte-chyba że naprawdę trzeba. Dla pcf8574 można ustawić 8 adresów sprzętowo-jak mię pamięć nie myli-ściągnij datasheet. A0-A3 do + lub gnd.(to adresy) Jest jeszcze pcf8574A-jeszcze 8 adresów. Urządzenie peryferyjne-to nie jak ja to rozumiem-tylko jak jest. Peryferia w procesorze-przetworniki...
Nawet tak nic się nie dzieje:-) Witam W ostatnim kodzie zmień config adc na single.
Można też zdefinować zmienna np tak: Zmienna As Single At &H80 i podstawić LDS r27, {b1} LDS r28, {b2} LDS r29, {b3} STS $80, r27 STS $81, r28 STS $82, r29
Potestuj bo tak na szybko przy poobiedniej kawie klapałem jedną ręką :D Może coś przeoczyłem i trzeba prześledzić. Te złożone operacje w jednej linii dla stałych Bascom robi bez problemu. Osobiście bym tego tak nie napisał. Nie wiem po co to ciągle obliczać jak można raz... [syntax=vbnet]$regfile = "m328pdef.dat" $crystal = 16000000 $hwstack = 64 $swstack...
Myślę, że jest to naturalne. Zmienna typu Long zajmuje 4 bajty a Integer tylko 2. Nie da się ciężarówki zaparkować w garażu dla malucha. W helpie jest informacja, że można dokonywać konwersji typów. Oto fragment: Dim I As Integer, S As Single S = 100.1 'przypisujemy liczbę zmiennoprzecinkową I = S 'ta instrukcja zmieni liczbę typu single na Integer...
Bo w Attiny13 nie ma tego pinu ale podanie w konfiguracji AVCC ustawia ref na napięcie zasilania. Nawet znalazłem program mojego termostatu , o którym już prawie zapomniałem i tam linia konfiguracyjna dla ATTINY13 wyglądała właśnie tak: Config Adc = Single , Prescaler = Auto , Reference = Avcc Wszystko działało więc zakładam, że u Ciebie też powinno...
Dzięki za rozjasnionko czyli 2,56V to max, a co mam zrobic zeby miec do 5V? Wystarczy podłączyc avcc do 5V? a to aref z tym kondensatorkiem zostawić? Config Adc = Single , Prescaler = Auto , Reference = Avcc Pod warunkiem ze reszta odpowiednio filtrowane i zabezpieczone przed ESD i EMC. Na linii AVcc przydalby sie takze maly induktor (cewka); oprocz...
A co to da? Nic. Nic jeżeli program będzie napisany tak jak teraz, czyli bez użycia przerwań a za to z użyciem waitusów. Co do szybkości działania to ja osobiście ie wierzę że na ATTiny2313 ten sam program działał szybciej. Na ATTiny2313 na pewno był sprawdzany inny program (bez LCD albo bez operacji na liczbach typu Single na przykład).
Witam napisałem programik odczytujący pomiary z adc wszystko działa ładnie ale jak ustawie na napięcie zewnętrzne to pomiar stoi cały czas na maksimum jako napięcie odniesienia używam układu lm336 konfiguracja w bascomie Config Adc = Single , Prescaler = Auto , Reference = Aref Jeżeli Reference ustawie na avcc lub na internal to pomiar działa jeżeli...
Mam pytanko oto część programu z postu Odczyt = 1wread(2) T = Odczyt - 16 T = T * 10 T = T \ 16 T = T \ 10 Możecie mi powiedzieć dlaczego najpierw mnożycie przez 10 potem dzielicie przez 16 i dalej dzielicie przez 10 ( czyli 10*16/10=16). Nie lepiej tylko podzielić przez 16. I jeszcze jedno pytanie dotyczące liczb ujemnych Ds przedstawia liczby ujemne...
Jest to "poprawne rozwiązanie". Poprawne w cudzysłowie ponieważ jak widzę typ SINGLE w Bascomie to aż mnie coś bierze :) Ten sam program napisany bez użycia typu zmiennoprzecinkowego (wykorzystując tylko typ całkowity) wykona się dużo, dużo... szybciej i zajmie mniej pamięci programu i danych.
Stwórz tablicę za pomocą: Dim Zmienna(5) As Byte 'lub Word, Integer, Long, Single, Double... Przed zapisem aktualnej wartości do Zmienna(1), przesuń wartości z 1, 2, 3, 4 o jeden indeks (na 2, 3, 4, 5). Pamiętaj aby zrobić to tak, by nie "zamazać" wartości przy przesuwaniu. Potem zapisujesz aktualną wartość do Zmienna(1) i masz komplet, który...
single bascom bascom double single single bascom przecinku
zabezpieczenie odkurzacz odpowietrzyć mondeo router prędkość wysyłania
Opłacalność wymiany uszczelki pod głowicą w Peugeocie 309 Lokalizacja sterownika silnika w Ford Galaxy 2.3 Mk1 2002