[BASCOM] shiftout do multiplexu VFD

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!
ODPOWIEDZ
Awatar użytkownika
haterkmp
Użytkownik
Posty: 652
Rejestracja: 08 sie 2008, 11:47
Lokalizacja: Wałbrzych

[BASCOM] shiftout do multiplexu VFD

Post autor: haterkmp » 08 maja 2010, 8:49

szanowni Koledzy
czy to ma szanse działać?

Kod: Zaznacz cały

select case mux
case 0:
portb = &B00000001
cyfra = sekjed

case 1:
portb = &B00000010
cyfra  =sekdzies
...
...
...
case 7:
portb = &B10000000
cyfra = goddzies
end select

shiftout portd.0 , portd.1 , cyfra , 8
czyli na porcie B wybieram siatkę a poprzez rejestr przesuwny chce wyświetlić odpowiednią cyfrę ze zmiennej. Proszę się nie śmiać jakby co :mrgreen:

keruseykaryu

Post autor: keruseykaryu » 08 maja 2010, 11:03

Łoj. Nie ma opcji 8 w Shiftout. Jest tylko 4.

Awatar użytkownika
haterkmp
Użytkownik
Posty: 652
Rejestracja: 08 sie 2008, 11:47
Lokalizacja: Wałbrzych

Post autor: haterkmp » 08 maja 2010, 11:16

to tylko 4 bity danych mogę wysłać?

[ Dodano: 2010-05-08, 12:18 ]
na pewno tylko 4?
The number of bits may be specified. You may omit this info. In that case the number of bits of the element data type will be used.
The VARIABLE is a normal BASIC variable. And may be of any type except for BIT


[ Dodano: 2010-05-08, 12:20 ]
a czyli składnia by musiał być taka:

shiftout portd.1 , portd.1 , cyfra , [8]

keruseykaryu

Post autor: keruseykaryu » 08 maja 2010, 13:10

:idea: Może przeczytałby kolega ten temat w helpie jeszcze raz?
Najpierw option, potem może bits i może też delay! I żadne tam nawiasy kwadratowe nie są potrzebne. To jest BASCOM, nie C/C++. Zwróć uwagę na pominięte przez Ciebie słowo:
Bits
Optional number of bits to shift out.

Delay
Optional delay in uS. When you specify the delay, the number of bits must also be specified. When the default must be used you can also use NULL for the number of bits.
Teraz już wszystko wiadomo co te nawiasy tam robią?

Awatar użytkownika
haterkmp
Użytkownik
Posty: 652
Rejestracja: 08 sie 2008, 11:47
Lokalizacja: Wałbrzych

Post autor: haterkmp » 08 maja 2010, 13:18

czyli w sumie mogę pominąć to wszystko i wpisać tylko

Kod: Zaznacz cały

shiftout portd.0 , portd.1 , cyfra

keruseykaryu

Post autor: keruseykaryu » 08 maja 2010, 13:27

Nie. Nie możesz. Już trzeci raz piszę o option. Może byś tak łaskawie zauważył ten parametr... :evil:

Awatar użytkownika
haterkmp
Użytkownik
Posty: 652
Rejestracja: 08 sie 2008, 11:47
Lokalizacja: Wałbrzych

Post autor: haterkmp » 08 maja 2010, 13:47

a! chodzi Ci o to od którego bitu ma iść w rejestr i z jakim zboczem zegara :mrgreen: no no to tak zapomniałem o tym ale jeszcze nie wiem jaki rejestr będzie używany. myślę o 74HCT164 albo 4049.

[ Dodano: 2010-05-08, 14:50 ]
keruseykaryu, nie denerwuj sięna mnie bo ja w tej materii to ja zieleniak jestem :wink:

[ Dodano: 2010-05-08, 14:50 ]
a co do samej transmisji to może być?

keruseykaryu

Post autor: keruseykaryu » 08 maja 2010, 18:02

haterkmp pisze:a co do samej transmisji to może być?
Napisz, uruchom, przetestuj. Nie wszystko co wydaje się dobre "na oko" nim jest. Ja bym to uprościł. Poszłoby to case w niebyt.

W C by było elegancko:

Kod: Zaznacz cały

PORTB = 0x01 << mux;
cyfra = rtcnum[mux];
Tablica rtcnum[] zawiera dane do wyświetlania.

W BASCOM tak nie zrobisz, bo nie można stałych rotować. O ile pamiętam :P

Awatar użytkownika
haterkmp
Użytkownik
Posty: 652
Rejestracja: 08 sie 2008, 11:47
Lokalizacja: Wałbrzych

Post autor: haterkmp » 09 maja 2010, 16:11

dzięki za pomoc w C... jednak nieprzydatna... chodzi mi o zasadę transmisji - kiedy mam wywalać na rejestr dane. po pobraniu zmiennej (cyfry) i siatki czy w innym momencie.
jeżeli ktoś moze pomóc to proszę o pomoc bo jak widzę wszyscy wielcy potrafią tylko pochwalić się swoją wiedzą o C...

keruseykaryu

Post autor: keruseykaryu » 09 maja 2010, 17:30

Kto ci broni skorzystać z takiej wizji? Szybko wykombinujesz jak z tych dwóch linijek zrobić cztery linijki w BASCOM i pozbyć się tego case z 30 linijkami, co zeżre obfitą porcyjkę dostępnej flaszki.
haterkmp pisze:chodzi mi o zasadę transmisji
No to gdzie te informacje jak masz ten wyświetlacz podłączony? Gdzie te przepastne schematy? Nie ma, bo jak widzę wszyscy chcieliby im dać coś z niczego. Przykład? Proszę bardzo:
haterkmp pisze:na porcie B wybieram siatkę a poprzez rejestr przesuwny
Teraz mam napisać 4 kody pod cztery różne rejestry? A sobie wybierzesz. Łoj. Nie tędy droga.

Awatar użytkownika
haterkmp
Użytkownik
Posty: 652
Rejestracja: 08 sie 2008, 11:47
Lokalizacja: Wałbrzych

Post autor: haterkmp » 10 maja 2010, 10:18

generalnie to bez różnicy jak jest podłączony wyświetlacz... z resztą to wynika z kodu że siatki są na porcie B. a chodzi mi o to w którym momencie program ma to wysłać do rejestru. a rejestr niech będzie przykładowo 74LS164 jak już typ jest przez ciebie wymagany...

[ Dodano: 2010-05-10, 14:19 ]
czyli dla takiego rejestru składnia będzie taka:

Kod: Zaznacz cały

shiftout , pind.0 , pind.1 , cyfra , 0
ale dalej mi chodzi o to czy wysłanie do rejestru ma być w tym miejscu czyli po zakończeniu wyboru siatki i wpisania do zmiennej "cyfra" wartości czy kiedy indziej.

select case jest inkrementowany z każdym przerwaniem od przepełnienia timera1 co jakieś 4ms.

[ Dodano: 2010-05-10, 14:22 ]
aha i nie proszę o kompletny kod tylko o poradę w którym miejscu umieścić tą transmisję.

keruseykaryu

Post autor: keruseykaryu » 10 maja 2010, 17:29

haterkmp pisze:a rejestr niech będzie przykładowo 74LS164 jak już typ jest przez ciebie wymagany...
I już mi się ten rejestr nie podoba, bo nie ma buforowania. Możesz uświadczyć duchy na wyświetlaczu, jak najpierw wybierzesz siatkę, a potem ciurkiem polecą bity do rejestru.

Rozczłonkowałbym Ci projekt do góry nogami: dwa rejestry połączone w szereg z przepisywaniem CD4094. Jeden steruje siatki, drugi anody. I nie masz problemu, co wcześniej załączyć bo oba sygnały pojawiają się jednoczenie, razem ze zboczem na STROBE. Masz tylko trzy linie sterujące, a składać dwa bajty w jeden word (16bit) chyba potrafisz.

Awatar użytkownika
haterkmp
Użytkownik
Posty: 652
Rejestracja: 08 sie 2008, 11:47
Lokalizacja: Wałbrzych

Post autor: haterkmp » 10 maja 2010, 17:47

właśnie też myślę o tym rejestrze. a STROBE mam dać po ostatnim bicie. mniej więcej:
set portx.x
reset portx.x
i następna wartość.
czyli do zmiennej 16 bitowej wrzucam najpierw np. numer siatki, potem przesuwam zmienną o 8 w lewo i wpisuję do niej zmienną przedstawiającą cyfrę i puszczam STROBE i cała zabwa od nowa tak?
tylko dać to właśnie gdzie? przy select case czy gdzieś w pętli a może gdzieś na obsłudze przerwania?
a może zamiast rejestru w postaci 4049 dać MAX6921? mam takiego więc podpasowałby idealnie.

keruseykaryu

Post autor: keruseykaryu » 10 maja 2010, 17:52

haterkmp pisze:tylko dać to właśnie gdzie?
Do przerwania. Mniej zmartwień.
haterkmp pisze:a może zamiast rejestru w postaci 4049 dać MAX6921?
Jak masz MAXy to użyj. Przynajmniej konwerterów napięć nie trzeba.

ODPOWIEDZ