ADC ATmega8 BASCOM

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ZbeeGin

Post autor: ZbeeGin » 08 sty 2008, 21:59

Nie da się.... To trzeba użyć sztuczki. Do wyniku dzielenia dodaj 100, następnie przeformatuj przez FUSING(), a potem wytnij przednią jedynkę używając funkcji RIGHT() która zwróci tylko 5 ostatnich znaków ciągu. I gotowe.

Awatar użytkownika
Krystian1989
-
Posty: 47
Rejestracja: 06 kwie 2007, 8:56
Lokalizacja: TBG
Kontakt:

Post autor: Krystian1989 » 12 sty 2008, 11:19

Dobrze to już wszystko działa tak jak należy. Teraz mam jeszcze jedno pytanie : jak zmienną typu single wyświetlić na wyświetlaczu siedmio-segmentowym LED ?

ZbeeGin

Post autor: ZbeeGin » 12 sty 2008, 14:10

Rozdziel ją na czynniki pierwsze i przedstaw kolejne cyfry.

GVolt
Użytkownik
Posty: 172
Rejestracja: 06 paź 2005, 17:13
Lokalizacja: z kątowni

Post autor: GVolt » 22 sty 2008, 19:30

Podepnę się do tematu, bo nie będę nowego tworzył.

Zrobiłem sobie testowy układ do ADC na m8.
Program w BASCOMIE:

Kod: Zaznacz cały

Rem Marcin Wójcikowski Program testowy ADC Atmega8 22.01.2007r.

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

Config Lcd = 16 * 1a
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.0 , Rs = Portd.7

Config Portb = Output                                  'podświetlenie
Portb.5 = 1                                                 'zaświeć
Config Portc = Input


Config Adc = Free , Prescaler = 8 , Reference = Internal

Dim U As Word

Start Adc

Cursor Off

Cls
Lcd "Emtis 2007"
Wait 3
Cls
Lcd "TEST ADC"
Wait 3

Do
Cls
Lcd U
U = Getadc(0)
Loop

End

:arrow: SCHEMAT

Układ w symulacji działa ok, ale w realu lcd jako wartość U wyświetla cały czas 0.

Awatar użytkownika
Krystian1989
-
Posty: 47
Rejestracja: 06 kwie 2007, 8:56
Lokalizacja: TBG
Kontakt:

Post autor: Krystian1989 » 24 sty 2008, 15:37

Witam, właśnie dostałem układ i przetestowałem. Kolego GVolt wklej ten fragment kodu , powinno ci zadziałać. Mi działa. Powodzenia.

Kod: Zaznacz cały

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

Start Adc

astony
-
Posty: 12
Rejestracja: 08 mar 2006, 0:52
Lokalizacja: zapytaj
Kontakt:

Post autor: astony » 02 wrz 2009, 9:59

Witam
Próbuję zrobić potrójny woltomierz na atmega8 .
W kodzie z pierwszej strony kiedy daję :
Dim wolty as single - dostaję bląd 242.
Rozumiem że getadc daje word, niestety nie wiem jak zrobić word na single
Jestem całkowicie zielony i gorąco prosze o pomoc

Awatar użytkownika
RcTomek
Moderator
Posty: 243
Rejestracja: 27 wrz 2007, 21:15
Lokalizacja: Głogów / Wrocław

Post autor: RcTomek » 02 wrz 2009, 14:50

Zajrzyj do karty katalogowej m8. Tam w rozdziale o ADC jest wzór jak to przeliczyć.

astony
-
Posty: 12
Rejestracja: 08 mar 2006, 0:52
Lokalizacja: zapytaj
Kontakt:

Post autor: astony » 02 wrz 2009, 20:01

Chodzi mi o word -> single.
Mój przyrząd ma działac tak:
V1
V2-V1
V3
V1/R
Te cztery wartości mają być na LCD, a bez single tego nie zrobie :(

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 02 wrz 2009, 20:13

Z tego (help):
SINGLE CONVERSION

When you want to convert a SINGLE into a byte, word, integer or long the compiler will automatic convert the values when the source string is of the SINGLE data type.

integer = single


You can also convert a byte, word, integer or long into a SINGLE by assigning this variable to a SINGLE.

single = long
wynika że możesz sobie przypisać word do single tylko pewnie musisz najpierw pobrać wynik getadc do zmiennej word a później przepisać wartość do nowej zmiennej typu single.

np.

Kod: Zaznacz cały

nap=getadc(0)
napiecie=nap
nap - word,integer
napiecie - single


Czy zadziała nie wiem bo nie używam Bascoma.

astony
-
Posty: 12
Rejestracja: 08 mar 2006, 0:52
Lokalizacja: zapytaj
Kontakt:

Post autor: astony » 02 wrz 2009, 20:22

Wszystko fajnie, tylko nie pokazali jak ?

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 02 wrz 2009, 20:24

no przecież ci napisałem kod jak moim zdaniem powinno to wyglądać (idea):> Tyle że nie wiem czy bascom to przetrawi bo go nie znam.

Musisz sobie zadeklarować nap jako word a napiecie jako single do tego mojego przykładu.

astony
-
Posty: 12
Rejestracja: 08 mar 2006, 0:52
Lokalizacja: zapytaj
Kontakt:

Post autor: astony » 02 wrz 2009, 20:27

Właśnie próbuję i rzeczywiscie coś się dzieje :).
Dzięki

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 02 wrz 2009, 20:45

Warto czasem czytać helpa i dokumentacje.

astony
-
Posty: 12
Rejestracja: 08 mar 2006, 0:52
Lokalizacja: zapytaj
Kontakt:

Post autor: astony » 02 wrz 2009, 21:00

Próbuję jeszcze ustawić pozycję "fusing (swolty "##,##),żeby przy 30V i 7V przecinek był w tym samym miejscu. Locate wykazuje errory. Można to jakoś obejsć?
Plese :)

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 02 wrz 2009, 21:18

Najprosciej to napisac warunek: jeśli napiecie < 10 wtedy zeby dodawał przed wyświetlaną wartością spację albo przesuwać tekst o jedną pozycję w prawo (możliwe że będzie tu pomocna funkcja LOCATE)

ODPOWIEDZ