Ja to zawsze robię w ten sposób: ldi r22,5 Go: Pomiar1 = Getadc(0) dec r22 brne Go Zawsze działa, nie wygląda tak rażąco, no i zżera mniej pamięci z programu.
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.
Jednakże - Twoje pytania są mało zrozumiałe... dokładnie to samo chciałem powiedzieć. czy napewno wiesz o czym wogóle rozmawiamy ?? wszystkie przeliczenia to wzory matematyczne, i trzeba je tylko odpowiednio przepisać do programu. niema gotowych instrukcji na wszystko. trzeba sie troszke pomęczyć :D
w bascomie jest ten problem ze przy odczycie z AD trzeba powtórzyc ta sama komende i powinno dzialac czyli np: ...... A = Getadc(0) / 10 A = Getadc(0) / 10 .......
Nie powinno być getadc(0) ?
Odczyt z ADC czyli, Pomiar=Getadc(1) wrzuć do pętli głównej.
No więc jeśli stosujesz M8 to masz gotowe rozwiązanie powyżej. A... zapomniałem napisać, że potrzebny dzielnik napięcia. Może być przez 2 i jako napięcie odniesienia podać AVCC (o ile AVCC=5V). $crystal = 4000000 $regfile = "m8def.dat" Config Timer1 = Pwm , Pwm = 10 , Prescale = 8 , Compare A Pwm = Clear Down 'Konfiguracja Timera Config Portd...
Long = GetAdc(0) Single = Long * 0.01955 String = Fusing(Single, "##.##") LCD String; "V"
Znam standardowa obsluge ADC w bascomie czyli getadc.. Problem z nia jest taki ze procesor zatrzymuje swoje dzialanie na dosc dlugi czas konwersji. W moim programie nie moge sobie na to pozwolic. Dlatego potrzebuje procedure inicjalizacji ADC na rejestrach i odczytanie wyniku konwersji po czasie po jakim na pewno zostala zakonczona (u mnie 1ms) ew po...
Pokaż Config ADC....
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ć.
Napisałem sobie prosty program w Bascomie AVR - wiem że bascom nie cieszy się najlepszą opinią ale jeszcze się nie przejechałem, wiele urządzeń działa do dziś i może zła opinia to po części zasługa początkujących którzy zwalają brak umiejętności na kompilator. Program w przerwaniu od timera mierzy wartość z ADC, jest to prąd silnika, i porównuje ją...
Witam. Zaczynam zabawe z procesorkami i już mam pare pytań: 1 Jest formułka GetADC (czy coś, analog-digital conv.) -w jakim "formacie" czy formie dostaje z tego polecenia wynik?? 2 Jak te kilka wyników ustawić w kolejce? 3 I co można zrobić z danymi z adc? - np czy można przekonwertować na milisekundy?? :?:
Był taki probem w BASCOMie z funkcją GETADC(). Po zmianie kanału odczytywała ona nadal poprzedni kanał, mimo iż multiplekser był przełączany poprawnie. Rozwiązanie problemu było dość proste. W rozwinięciu funkcji zastosowano dwukrotny odczyt stanu przetwornika ADC. Pierwszy odczyt odrzucano, i brano pod uwagę tylko drugi odczyt. Wada: Dłuższy czas oczekiwania...
Dzięki ci bardzo. Chyba mam uszkodzonego helpa:) Jeszcze raz wielkie dzięki i pozdrawiam. ps. Czemu nie ma pomógł. ________________________________________... Coś mi ten sposób nie działa. Wywala mi błąd podczas kompilacji "Source variable does not match the target varible[0|ADCD]" Da sie to zrobić jakoś inaczej??
mój błąd - musisz zostawić W jako Word, a potem dodawać wartości do zmiennej typu Long poprzez tzw. niejawne rzutowanie typów. czyli Dim W as word, L as long '... W=getadc(0) L=L+W '... L=L/10 W=L '... i dalsze obliczenia
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
To już załatwia bascom - jest ustawione na Auto. co do sedna, sprawdziłem dziś na swoim układzie kanały 0-7 ADC następującym programem: [syntax=basic4gl] $regfile = "m2560def.dat" $crystal = 16000000 Config Adc = Single , Prescaler = Auto , Reference = Avcc Dim Wart_adc1 As Word Dim Wart_adc2 As Word Start Adc 'AVCC bezpośrednio do 5V, AREF w powietrzu,...
Porównaj: Moja propozycja Wartosc = Getadc(4) Wartosc = Wartosc / 5 Wartosca = Wartosc Twój kod Wartosc = Getadc(4) Wartosc = Wartosc / 5 Wartosc = Wartosca Widzisz różnicę :?: Piotrek
Poniżej fragment: Odczyt = 0 For Krok = 1 To 100 W = Getadc(1) Odczyt = Odczyt + W Next Krok Wyn = Odczyt / 100 Zmienna wyn to uśredniony pomiar ze 100 odczytów. Pozdrawiam.
Witam niestety komendą LCD nie można wyswietlać zmiennej typu Word. Jak obejść ten problem? Zadeklaruj jakąś zmienną jako string (np. tak jak poniżej jest ss1) Dim Ss1 As String * 12 Ss1 = Fusing(W, "#.&&") ' formatowanie zapisu doformatu x.xx Lcd "U=" ; Ss1 jak wartość odczytana komendą getADC ma się do wartości napięcia...
Możesz Kolego lukaszSZ999 napisać o jaką ilość kroków dokładnie chodzi przy sterowaniu joystickiem, jakoś nie zrozumiałem do końca działania tego programu. Nie wiem czy to ważne, ale Attiny13 ma taktowanie 9,6 Mhz. lub 4,8 Mhz z możliwością podziału przez 8 - ($crystal = 1000000), po drugie nie widzę żeby Kolega ustawił pin PB.4 jako wejście (Getadc(2)).
Żeby nie było, że w przerwaniach ustawiam tylko flagi Hahaha :D Wiem na ile sobie mogę pozwolić przy danych założeniach :P Kiedy się już coś tam wie to się nie zgaduje "czy się uda" tylko się to wie :D Te ADC można czytać w Bascom z pominięciem Getadc() W plikach DEF są zaszyte również definicje pod nazwą WIO Pozwala to na odczyt dwubajtowych rejestrów...
Po pierwsze to z adc dostajesz zmienną w zakresie 0-1023 , a w pwm zadeklarowałeś 8 bitów czyli zakres 0 - 255. Spróbuj tak: Dim U As Word Dim P As byte Start Adc Do U = Getadc(0) U = Getadc(0) P=U/4 Pwm1a = P Loop End Przy konfiguracji przetwornika użyj Reference = avcc. Ewentualnie pisz na GG, a wyniki opiszemy w temacie :D . Pozdr. Daniel
Jeśli piszesz w BASCOM to wystarczy polecenie GETADC z parametrem liczbowym określającym numer kanału.
Co to w ogóle jest: Trochę przekombinowane: Powinno być: czytaj_stany: Czujnik_lewy = Getadc(5) Czujnik_prawy = Getadc(3) Return ... aczkolwiek dwukrotne powtórzenie Getadc(x) kiedyś maskowało błąd Bascoma, który jak dobrze pamiętam polegał na odczytywaniu za pierwszym razem napięcia z końcówki o numerze o jeden niższym niż wskazana...
Nie wiem jak teraz, ale kiedyś w BASCOMie każde polecenie GETADC robiło dwie konwersje i wynik brało z drugiej. Więc w BASCOMie nie trzeba odrzucać pierwszej konwersji bo robi to automatycznie polecenie GETADC (co jest bez sensu no ale mówię jak jest (lub było)).
Stosowanie GETADC jest możliwe w trybie SINGLE przetwornika, a nie FREE.
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
Znalazlem jakis stary programik.... odczyt 2 kanalów ADC z częstościa 100 razy na sekunde... Analize pozostawiam Tobie...(podpowiem że Help wszystko wyjaśni) Pozdrawiam $regfile = "m8def.dat" $crystal = 11059200 $baud = 19200 Config Adc = Single , Prescaler = Auto , Reference = Off Config Timer1 = Timer , Prescale = 256 On Timer1 Pomiar Enable...
Witam. Praktyczne pytanko: w jaki sposób, określić ilość cykli zegarowych niezbędnych na wykonanie poszczególnych instrukcji języka Bascom AVR, np. getadc(), if, input oraz w jaki sposób obliczyć rzeczywisty czas potrzebny na wykonanie pojedynczej instrukcji, znając wartość rezonatora kwarcowego, oraz użyty mikrokontroler?
Nie wiem po co wyłączasz i włączasz ten przetwornik, ale może jakaś oszczędność baterii czy coś.. W każdym bądź razie pierwszy odczyt po włączeniu przetwornika może być zafałszowany. Bascom i tak czyta dwa razy, ale uśrednia te dwa odczyty. Spróbuj wykonac dwa doświadczenia. W pierwszym pod "Nap = Getadc(4)" dopisz dokładnie taką samą druga linijkę....
Weż w=getadc(0) wynik=w+w w pętle For
Gdzie to wyczytałeś, tak dla formalności? Oczywiście że nie, przecież masz napisane: Sample = Getadc(0) ' pobierz napięcie z ADC0 A gdzie jest w Uc ADC(0)? Dodano po 1 I jeszcze jedno, to wskaźnik MONO.
wystarczy nieco przejrzeć helpa bascoma: [syntax=basic4gl]Config Adc = Single , Prescaler = Auto 'Now give power to the chip Start Adc 'With STOP ADC, you can remove the power from the chip 'Stop Adc Dim W As Word , Channel As Byte Channel = 0 'now read A/D value from channel 0 Do W = Getadc(channel) Print "Channel " ; Channel ; " value " ; W Incr Channel...
Witam Nie za bardzo znam się na bascomie ale nie wiem czy nie trzeba (w C trzeba) wystartować konwersję dla danego kanału lub kilku na raz ad1. Mux jest po to żeby do danego kanału (ch0,ch1,ch2,ch3) podpiąć wewnętrznie dowolny pin (patrz datasheet) ad2. kanałów w ADCA jest 4 i każdy ma swój niezależny rejestr z wynikiem ADC_CHxRES ad3. wydaje mi się...
(...) osobnym PinX i oczekuj na stan niski ADCx2 aż do spełnienia tego warunku. Jeśli na ADCx2 napięcia równe 0 mrugnij diodą Led1 jeden raz przez 300ms, wyłącz Przekaźnik1 na PinX Po czym wróć do góry procedury, do oczekiwania na napięcie na ADCx1 To właściwie tyle. Dziękuję za uwagę i wszelaką pomoc. Witam serdecznie na forum! Chętnie pomogę Ci przygotować...
Najprościej będzie zmodyfikować program tak: [syntax=vbnet] Rez = Getadc(5) 'przechwycenie wartości napięć na wejściach ADC Pot_max = Getadc(4) If Rez >= Pot_max Then Wait 1 'wykrywanie przeciążenia Rez = Getadc(5) 'przechwycenie wartości napięć na wejściach ADC Pot_max = Getadc(4) If Rez >= Pot_max Then Reset Portd.0 'wyłączenie silnika Reset Portd.1...
tak jak napisałem Zero = Getadc(2) If Zero < 780 Then Call Pomiar Call Diody End If
co ci da SAMO getadc(0)? Gdzie jest zmienna ktora bedzie przechowywac wartosc zwróconą przez to getadc(0) ? :D Dopisz na poczatku programu to dim op as word a w subie "opóźneinie" opoznienie: op=getadc(0) waitms op return
Nie !!!! Nie w środku pętli to byłoby bez sensu. Ale ja to bym zrobił inaczej [syntax=basic4gl].. .... ...jakieś instrukcje.. .. Dim Pk As Byte Declare Sub PrzyciskC5 Ddrc = &B00000011 Set Portc.5 .... ...jakieś instrukcje.. .. Menu3: Pk = 0 Do Locate 1 , 8 Lcd "T" Start Adc Temp = Getadc(6) Temp = Getadc(6) C = Temp / 4.166 Celsius = Fusing(c , "###.#")...
Spróbuj zmodernizować kod w ten sposób: Do A = Getadc(0) B = Getadc(3) C = A * 0.0049 D = B * 0.0049 T = Atn2(c , D) ' zwrócenie wartości arctan w radianach E = Rad2deg(t) 'zamiana rad na stopnie G = Fusing(c , "#.&&") 'zamiana wart. nap. sin na tekst H = Fusing(d , "#.&&") 'zamiana...
Zajrzałem do skompilowanego pliku i widzę że kompilator w ogóle nie używa tu R2 i R3 więc mi je zostawił ;) Od pewnego czasu w Bascom do rejestrów można się odwoływać prosto z kodu. Ciekawe którą wersję Bascom masz. Pewnie znowu schody... U mnie program się kompiluje na 96% [syntax=vbnet] $regfile = "attiny13.dat" $crystal = 9600000 $hwstack = 16 $swstack...
Zakładając, że użyjesz innego procka, dalej ciężko się domyśleć, o co dokładnie pytasz. Ale spróbuję :p Zapewnie chcesz najpierw obsłużyć przetwornik. Zatem na początku konfiguracja: - jeśli napięcie odniesienia ma być pobierane z wyprowadzenia AVCC mikrokontrolera: Config Adc=Single, Prescaler=Auto, Reference=Avcc - jeśli chcesz skorzystać z wewnętrznego...
Chodzi o to , że w wyniku działania V = GetADC(x) dostaniesz wartość od 0 do 1023, to musisz przekonwertować tak, aby dostać Volty. Stosując wewnętrzne źródło referencyjne masz mnożnik około 0.0049, czyli jeśli w wyniku V dostaniesz 512 to po pomnożeniu wyjdzie Ci około 2.5V. Oczywiście musisz zastosować dzielnik wejściowy np. 1:10, bo max napięcie...
Sprawdziłem to dla sportu bo taki prosty kodzik od czasu do czasu to jak zjedzenie cukierka :D i to nawet działa. Oświetlone słońcem czy tam nawet żarówką LED`ową się nie wzbudza a przy zbliżeniu i owszem. Tiny85 ma juz wbudowany wzmacniacz dla ADC i tam mozna więcej nawet zadzaiałać, ale Tiny13 nie ma więc dla czułości użyłem wewnętrznego napięcia...
Trzeba skracać czas który Timer ma odmierzać. W tym trybie zrobisz to najłatwiej w przerwaniu. Zaraz pod "Obrot:" użyj jednej z komend Load albo Timer= Po prostu teraz Timer liczy od 0 do 255. Jak coś do niego wpiszesz to będzie liczył, na przykład, od 128 do 255 czyli krócej. Dodaj sobie potencjometr do układu i będziesz mógł sterować prędkością w...
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"...
Niestety tamto nie zadziałało pojęcia nie mam czemu, ale udało mi się zrobić takie coś jak niżej. Da sie prostym sposobem skrócić zmienną single do postaci xxx.x ?? [syntax=basic4gl]Odczyt = Getadc(0) Temp = Odczyt * 0.0025 Temp_dz = Temp * 100[/syntax]
[syntax=basic4gl] Wczytaj_stany_przetwornikow: 'Początek podprogramu o nazwie jak przed dwukropkiem wywoływanego przez Gosub Wczytaj_stany_przetwornikow Start Adc 'Uruchom Przetwornik ADC W = Getadc(5) ' "Wczytaj" do zmiennej W wartość zmierzoną na końcówce ADC5 W = Getadc(5) ' Ponownie wczytaj. W Bascomie był błąd w Getadc naprawiany przez 2 krotne...
może - if ampl>62 then ampl=62 ? do postu nizej - to może wprowadź jakąś zmienną pomocniczą? albo Ampl = Getadc(0) if ampl>62 then ampl=62 Ampl = 32 - Ampl
Włącz timer1 i w jego przerwaniu wstaw getadc np co sekundę. To ma być woltomierz? Rozumię , że masz tylko jedną cyfrę na wyświetlaczu?
Nie zadziała to w tak prostej formie w jakim masz kody. 1. W kodzie 1 musisz ustawić PWM z timera 1 na 10bitowy (masz 8bitowy w konfiguracji). 2. W kodzie 2, nie masz ustawionego PORTC na wejście dla przetwornika. 3. W kodzie 2, samo przypisanie W = Getadc(channel) (po skonfigurowaniu timer1 i zmianie rozdzielczości PWM na 10bit) będzie zmieniało prędkość...
W zasadę działania programu nie wnikałem ale błędy jakie znalazłem to: 1. Masz zadeklarowaną Funkcję Sharp_Odczyt natomiast w programie wywołujesz funkcje Sharp_Odczyt1 i Sharp_Odczyt2 które nie są zadeklarowane. Proponuję funkcję Sharp_Odczyt przerobić tak: Function Sharp_odczyt(byval Kanal As Byte) As Word Stop Timer0 Sharp_odczyt = Getadc(kanal)...
By odrobinę przyspieszyć zrób inaczej czytanie danych z ADC zamiast For C = 0 To 160 'zapełnianie tablicy Nap1 = Getadc(1) Nap1 = Nap1 / 5 Seg(c) = 118 - Nap1 'dopasowanie do LCD Next zrób For C = 0 To 160 'zapełnianie tablicy Seg(c) = Getadc(1) Next For C = 0 To 160 'zapełnianie tablicy Seg(c)= Seg(c)/...
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...
"Jak ustawisz minimalną dla 2 stanów to wykresem jest linia prosta" Oczywiście, jak sama nazwa wskazuje PWM to Pulse-width modulation.(modulacja szerokości impulsu) Jeśli zasilisz układ napięciem 24V to przy wypełnieniu PWM=255 będziesz miał 24V. Jeśli ustawisz wypełnienie 50% czyli PWM= 127 to teoretycznie powinieneś otrzymać 12V. Dlatego proponowałem,...
Mam takie pytanie o troszkę inny kod a mianowicie zrobiłem odziwo działający sterownik PWM potencjometrem i wyświetlam to na led 7 seg , chodzi oto ze na wyświetlaczu wynik pokazuje 0-1024 a chce wartość napięcia ADC(0) . Co zrobiłem źle ? Przekonvertuj wartośc 'I' (odczyt ADC) na proprcjonalną wartośc napięcia. Zakładajac że napiecie referencyjne...
No mniej więcej tak: Dim X As Word Dim Y As Byte ... ... X = Getadc(2) Y = Lookup (X, Tablica) 'To zamiast tych wszystkich IF-ów X = Y Setki = X Mod 1000 Tysiace = X / 1000 ... ... Tablica: Data 120 'Pierwszy element Data 120 Data 120 ... ... Data 120 Data 119 '140-ty element (drugi element w wersji assemblera) Data 119 ......
Wykozystaj pozostałe PWM w procku OCRO i OCR2 Dlaczego tak napisałeś? X = Getadc(0) X = Getadc(0) Y = Getadc(1) Y = Getadc(1) Więcej opisów kodu (skąd ,po co,dlaczego) to ułatwi innym i Tobie rozgryzanie programu.
Tutaj masz instrukcje http://www.elektroda.pl/rtvforum/topic33... Jak "wyskoczą" Ci takie znaki " tutaj kod Dodano po 1 Widziałem już kilka razy tę dziwną konstrukcję programu bo wielu ją powtarza jak włączanie przerwań w przerwaniu by odebrać kod RC5. Wracając do tematu kiedy usypiasz procesor to on dosłownie zatrzymuje się na linii kodu "Powerdown"....
Nie ma tu nic z C. Napisałem to kiedyś "z palca" :D Ciebie najbardziej powinno zainteresować "Adcmax3 = Adcr3(3)" bo to jest przepisanie aktualnie najwyższej wartości. Rejestr(43) i to obok to funkcja która liczy wartość skuteczną napięcia. Może niepotrzebnie tam zostawiłem bo to jest z urządzenia które jest Modbus Slave`em. Ten wpis !SBI ADCSRA , 6...
Nie widziałem wcześniej, że już na to wpadłaś. Twój się kalibrował tylko w jedną stronę a ten powinien w obydwie (ale nie testowałem) ;) [syntax=vbnet]$regfile = "attiny13.dat" $crystal = 9600000 $hwstack = 2 $swstack = 0 $framesize = 22 Config Adc = Single , Prescaler = Auto , Reference = Avcc Dim Mem_adc As Word , New_adc As Word Dim Krok As Byte...
Witam Mam takie małe pytanko jak napisać funkcje która by co pewien czas np: 10 minut sprawdzała wartość ADC? Jeśli chodzi o wartość czasu uzyskuje go z odbiornika GPS. Config Adc = Single , Prescaler = Auto , Reference = Internal Dim Adcc As Word Do Start Adc Adcc = Getadc(0) Lcd Adcc Loop End
Jeśli kolega zna BASCOM to czego kolega nie rozumie po komentarzach? np. funkcja adc_init to jest takie config adc :) Jak? A to akurat po komentarzach widać. adc_select_input kolega nie potrzebuje, gdyż ten parametr jest podawany w GetADC(), timer_init to takie config timer... to nic skomplikowanego, niech sobie to kolega przeanalizuje uważnie, przepisanie...
Pierwsza konwersja przetwornikiem ADC może zwrócić błędy wynik. Wszystko pisze w Datasheecie. Starsze BASCOMy żeby się przed tym uchronić zawsze robią po dwie konwersje podczas procedury GETADC, ale nowsze może już nie więc może to jest problem.
Witam, Proszę o wskazanie błędu, nie chce mi skompilować programu - błąd w bascomie wyświetla w ostaniej linijce czyli w komendzie END - nie mam już pomysłu co jest nie tak [syntax=vbnet]$sim $regfile = "m8adef.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.6...
to spróbuj dodać Tmp_1 = Getadc(0) waitms 100 Tmp_2 = Getadc(1) możesz też spróbować dodać Enable ADC powodzenia i NARA'zie
Mowa o Bascom. Ale tak to jest jak się chce przedobrzyć. Wart_adc0 = Getadc(0) Wart_adc0_1 = Wart_adc0 * 0.501942605 'kalibracja temperatury wewnętrznej Wart_adc0_2 = Wart_adc0_1 - 273.15 ' od °C odejmujemy °K Wart_adc0_3 = Wart_adc0_2 Lcd Str(Wart_adc0_3) ... i ładnie wyświetla w stopniach Celsjusza z dokładnością do 1°
A jednak da sie w Bascomie zmieniac konfiguracje przetwornika ADC w trakcie wykonywania programu. Oto fragment dzialajacego programu: Do If Pinb.0 = 0 Then Config Adc = Single , Prescaler = Auto , Reference = Avcc '5V Start Adc Wart_ac = Getadc(0) End If If Pinb.1 = 0 Then Config Adc = Single , Prescaler = Auto , Reference = Internal '2.5V Start Adc...
dobrze by było troszkę wzmocnić to napięcie (tak żeby można je było mierzyć) minimalne napięcie odniesienia dla 8535 to chyba 2V, ale możesz dać więcej. Procedura w bascomie jest banalna deklarujesz np: Config Adc = Single , Prescaler = Auto , Reference = Internal Pomiar: Zmienna_y = 0 Zmienna_v = 0 Do Incr Zmienna_y Start Adc Zmienna_x = Getadc(0)...
Użyj przetwornika A/C do mierzenia napięcia a potem to tylko przetwórz jak ci pasuje. Przykładowy program do miernika napięcia: Config Adc = Single , Prescaler = Auto Start Adc Dim W As Word do W = Getadc(0) Loop End
wlasnie chcialbym to wykorzystac do pomiaru pradu na rezystorze. pdfa czytalem, wzmocnienie jest mozliwe nie na wszystkich kanalach, na kanalach ADC0 i ADC1 jest mozliwe ale to inna bajka. ale glownie chodzi mi o to, ktory kanal odczytywac 0 czy 1? i czy to bedzie wszystko. wiem, ze to prosto samemu sprawdzic ale przez najblizsze 2 tygodnie nie mam...
Wyrzuć ten wzór i obmyśl jakiś inny. W tej postaci to się absolutnie nie nadaje. Z ADC możesz uzyskać maksymalną wartość 1024, teraz podnieś to do potęgi 6 i wychodzi ci absurdalna liczba, program wywala się juz na pierwszym obliczeniu. Obliczanie napięcia może wyglądać tak: [syntax=basic4gl] Dim Obl_nap As String * 6 Dim Wartadc As Word Dim Tymcz As...
[syntax=basic4gl] $regfile = "m644pdef.dat" $crystal = 16000000 $baud = 9600 $hwstack = 64 $swstack = 64 $framesize = 64 'konfiguracja pinow wyswietlacza LCD; inicjalizacja wyswietlacza Config Lcd = 20 * 4 Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 Cursor Off Noblink Cls Dim Wart_adc...
Chcę użyć przetwornika AD w Atmega8. Programuje w bascomie AVR. Jest tam funkcja GetADC i nie mam żadnego problemu z jej uzyciem, ale ma ona taka zasadncizą wadę, że dziala tylko w trybie single i po jej wywołaniu czeka aż konwersja zostanie zakończona. (Jest to dość naturalne, bo przecież musi zwrócić wynik konwersji). Zależało by mi, aby uniknąć tego...
Mnie natomiast zastanawia, ten fragment Twojego kodu: Tar: '... For Z = 1 To 5 Wart_ac = Wart_ac + Getadc(0) Next Z Wart_ac = Wart_ac / 5 '... Do czego on służy :?: "Tarujesz" przetwornik ADC :?: :D:
w wierszu "U3 = Getadc(5)" blad "ADC_MUX entry not found in Dat file" rowniez w "U4 = Getadc(4)" taki sam blad. O CO CHODZI? Prosze o pomoc. 'Podprogram Czujniki Czujniki: Readeeprom Korekta_u3 , 30 Readeeprom Korekta_u4 , 40 U3 = Getadc(5) U3 = U3 / 2 U3 = U3 - 280 U3 = U3 + Korekta_u3 U4 = Getadc(4) U4 = U4 / 2 U4 = U4 - 280 U4 = U4 + Korekta_u4 Return
dlaczego aż 4 MHz- procek nie wyrabia się przy 1Mhz? przy 4MHz szybciej wykona program i przejdzie do uśpienia - więc chyba naa to samo wyjdzie [przy 1MHz program wykona się 4 razy wolniej]. Ale spróbuję. ustawić 1MHz i po zakończeniu pomiarów przez ADC - Getadc=x, wyłączać przetwornik.
Ten kod musisz okrzesać :D Czym to programujesz? Pytam bo umieściłeś dyrektywy dla programatora. Może i nie byłoby w tym nic dziwnego, ale w kodzie masz napisane 8MHz a tymi dyrektywami mikrokontroler zostałby ustawiony na fabryczne 1MHz... Inna sprawa to ten pomiar na ADC i zapisywanie jego wyniku po obliczeniach do PWM. Nie wszystkie tryby PWM mają...
Mam jeszcze pytanie do autora. 1. deklarujesz, a nie używasz Amp 2. skąd na początku jest znana wartość Avg? X = Getadc(2) '------------------Obliczanie sredniej----------------' Avg = Avg * ts Avg = Avg + x tem = ts + 1 Avg = Avg / tem
Tak na szybko mógł wkraść się błąd. Spróbuj zmienić G As Word na G As Long Tak na wszelki wypadek ;) Możesz też zobaczyć jaki wpływ na czas ma prescaler ADC Jeślii wpiszesz Config Adc = Single , Prescaler = 64 , Reference = Avcc to ADC będzie przetaktowane bo wyjdzie coś około 250kHz (mogłem sie pomylić w obliczeniach :) ) Jeślli wpiszesz Config Adc...
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...
Zdaje sie że wszystko robisz zupełnie nie tak. Jak masz ten fotorezystor to po prostu jedną nóżke do pinu przez rezystor ,drugą do zasilania. A do temperatury potrzebujesz raczej LM335z (ja taki mam) też jedna nóżka do zasilania ,druga do pinu uP ,następna do masy. Obydwa odczytujesz przez GetADC. szukaj tego w Helpie do bascoma ,ale zmień go na AVR...
Musisz wiedzieć że ADC Atmegi ma 10Bit czyli w uproszczeniu skalę do 1023 Kiedy jako napięcie odniesienia dla ADC użyjesz napięcia zasilania procesora (AVCC) to dokładność pomiaru wynosi : 5V/1024 czyli -> 5000mV/1024 = 4,88mV na jedna podziałkę ADC. Nie napisałeś jaki masz ACS a wystepują w wersjach 5A, 20A i 30A Zakładając że masz ten najczulszy 5A...
rozwiązałem to w nstp sposób gdzie: -x0 to korekta dla zerowego ciśnienia -x4 to wartość dla 4rech atmosfer -a,b zmienne pomocnicze -ezero, e4bar wartości zapisane w eeprom x0=ezero d=getadc(0) x4=e4bar a=x4-x0 a=4/a b=d-x0 p=a*b S = Fusing(p, "#.#") thirdline lcd "Bar="; Locate 3 , 5 S = Fusing(p, "#.##")...
Witam Wie ktoś jak za pomocą Atmega8 zbudować prosty woltomierz do pomiaru napięcia od 0 do ok. 5V i wyświetlić to na wyświetlaczu ?? w postaci np. Config Adc = Single , Prescaler = Auto, Reference = Internal Start Adc Dim W As Word , kanal As Byte kanal = 0 W = Getadc(kanal) W = Getadc(kanal) cls lcd W ; " volt " ; End Oto...
Może mi ktoś wyjaśnić dlaczego poniższy kod się nie kompiluje? $regfile = "m8535.dat" $crystal = 8000000 Config Adc = Single , Prescaler = Auto , Reference = Off Config Lcd = 16 * 2 Dim W As Word , Channel As Byte Cls Start Adc Channel = 0 Do W = Getadc(channel) W = Getadc(channel) Cls Lcd "Ch " ; Channel ; " value " ; W Waitms 250 Waitms 250 Loop End...
Simple how it`s look but should work ;) Set Freq manually but 1,2MHz is a oryginal value [syntax=basic4gl]$regfile = "attiny13.dat" $hwstack = 24 $swstack = 8 $framesize = 24 $crystal = 1200000 '$lib "mcsbyteint.lbx" ' <-option Config Portb = &B00100011 : Portb = &B11000000 Config Adc = Single , Prescaler = 8 , Reference = Avcc Start Adc...
Witam, Próbuję zbudować termometr elektroniczny oparty na Atmega8 o wbudowany ADC i układ LM50 i mam mały problem nie mogę poradzić z ustawieniem danych mianowicie: Termometr pokazuje mi w temperaturze pokojowej że jest 75 C dotknięcie ręką czujnika ją podnosi. Po podpięciu na krótko lm35 wszystko jest porządku termometr pokazuje realną temperaturę....
Mam pytanie: Czy mikrokontroler rozumuje w ten sposób: Wartość 400 (1000mV) na ADC da mi w kodzie: [syntax=basic4gl]Do A = getadc(0) LCD A Loop[/syntax] na wyświetlaczu 1000? Kolejne pytanie: Czy poniższy kod jest prawidłowy? [syntax=basic4gl] Do A = getadc(0) Temp = A / 10 LCD Temp ; "C"[/syntax] Załóżmy że wartość napięcia to 1000mV (400), więc na...
Witam, dopiero ucze się programowac w Bascomie i mam pare pytań. Ponumeruje je żeby łatwiej było odpowiedzieć: 1.Która częśc kodu odpowiada za pobranie napięcia Wart_acpomoc = Getadc(2) 2.Która częśc kodu wyświetla napięcie na Wyświetlaczu. Lcd "Akus " ; Wart_nap Polecam Helpa.
Witam , wklejam kod jaki udało mi się wypocić. Miało być tak pięknie a wyszło jak zawsze :-( Ten twój kod jest oczywiście błędny. Po pierwsze, jeżeli stosujesz napięcie referencyjne wewnętrzne, to dla AtMega 8 wynosi ono 2.56V. Zatem poziom napięcia mierzonego podanego na dowolny pin ADC nie może przekroczyc tej wartości. Jeżeli jednak ten warunek...
Powinieneś raczej mierzyć prąd na rezystorze diody (tylko że ten rezystor dla ułatwienia pomiaru musi być od strony masy). Żeby mierzyć w połowie impulsu to musisz uruchomić przerwanie od Timera1 i w nim dać funkcję Getadc. A jeżeli już mierzysz napięcie zasilania a nie prąd diody, to nie musisz trafiać w połowę impulsu więc już teraz powinno działać.
Procesorowi wszystko jedno ile to jest Volt bo to sprawa względna (np. wynikająca z zastosowanego dzielnika). Łatwiej jest podjąć decyzje bezpośrednio z odczytu ADC. Napisz sobie programik który pokaże Tobie wskazania/odczyty z ADC przy żądanych napięciach i to wpisz do Select Case. [syntax=vbnet]Dim Rezu As Word , Wynik As Single , Prev_adc As Word...
Kiedy w końcu zrozumiecie, że nie każdy chce zostać programistą i ludzie czasem programują sobie po to by coś zrobić i mieć z tego satysfakcje. Wiem jak oprogramować ADC i to nie tylko w Bascom, ale zauważ że piszemy tu o Bascom. Języku który upraszcza wiele rzeczy dając Ci określoną ilość prostych w użyciu funkcji. Jedną z takich funkcji jest Getadc()...
durny błąd Nap: Wart_u2 = Getadc(4) U2 = Wart_u2 * 0.004887585533 V2 = U2 * 4.83 Wart_nap2 = Fusing(v2 , "#.#" ) Wart_nap2 = Format(wart_nap2 , " ") Return 'to wywalić Select Case Wyswietlanie Case 0:
Witam. Mam prosty woltomierz na ATmega8 i powstają problemy: Mam zabezpieczenie odwrotnego podłączenia napięcia badanego na tranzystorze IRF520 ale przecierz jak wpakuje mu te dajmy na to nawet 300V w dren to sie nie spali pomimo że napięcia nie będzie na żadnym innym pinie , przebije go czy nie? ile trzeba voltów aby go przebiło napięcie?? Czy dioda...
Witam! po dlugich probach uruchomienia transmisji w rc5 pomiedzy dwoma prockami doszedlem do wniosku ze chyba w BASCOMIE (1.11.8.7) jest blad. aby zadzialalo Rc5send nalezy go uzyc podwojnie (kiedys tak chyba bylo z getADC). zalaczam moj dzialajacy KOD, moze komus to pomoze. (ja dlugo sie meczylem, mimo iz chyba wszystko z forum przeczytalem). FUSEBIT...
Witam. Tak na pierwszy rzut oka to masz błąd w programie bo w obu warunkach "case" sprawdzasz tę sama zmienną "W" a przed drugim case wpisujesz wartość z ADC do zmiennej "W1". W1 = Getadc(2) Wydaje mi się że zmiana nazwy zmiennej w drugim case na "W1" pomoże.
bascom getadc bascom pomiar getadc bascom atmega8 getadc
rygiel domofonu podłączyć niemiecki telefon komunikaty avast
ogranicznik przepięc urmet schemat
Jak wypolerować zarysowaną obudowę kina domowego? Jak przywrócić otwieranie okien dwoma kliknięciami?