Witam. Chciałbym pokazać ciekawe rozwiązanie które "oszczędza" wyprowadzenia małego ATtiny. Działanie z punktu widzenia organisty który to obsługuje: '**************************** 'Konfiguracja '**************************** $regfile = "attiny2313.dat" $crystal = 4000000 $baud = 9600 Config Portb = &B10000111 : Portb = &B11111111 '7-kropka,6-3 klaw,2-0 klaw+anody Config Portd = &B11111111 : Portd = &B11111111 '6-4 BCD Config Porta = &B00000000 : Porta = &B11111111 Config Timer0 = Timer , Prescale = 256 Enable Timer0 : On Timer0 Przerwanie0 '**************************** ' Zmienne '**************************** Dim Licznik As Byte 'ilosc cyfr z blokada do 3 Dim Dziel As Byte 'pomocnicza czasu (100ms) Dim Cyfra As Byte 'cyfra z klawiatury Dim Mux As Byte 'kolejne wyswietlacze / multipleksowanie Dim C1 As Byte 'wyswietlacz jednosci Dim C2 As Byte 'wyswietlacz dziesiatek Dim C3 As Byte 'wyswietlacz setek Dim F4ms As Bit 'flaga,czas na multipeksowanie Dim F100ms As Bit 'flaga migania (wprowadzanie) Dim Ustaw As Bit 'flaga gaszenia migania (wysłano na wysiwtlacz) Dim Licz_help As Byte Dim Send As Byte 'pomocnicza zmienna RS232 '*************************** ' Inicjalizacja i test wyświetlaczy '*************************** Do Portb = &B00000000 For Licznik = 0 To 9 Portd = Lookup(licznik , Tabela) Waitms 400 Next Licznik If Licznik = 10 Then Exit Do End If Loop Licznik = 0 Portb = &B11111111 Portd = &B11111111 '**************************** ' Wartości początkowe '**************************** C1 = 0 C2 = 0 C3 = 0 Reset Ustaw Enable Interrupts '**************************** 'Petla glowna '**************************** Do If F4ms = 1 Then 'jesli flaga to mineło 4ms i Reset F4ms Gosub Wyswietl 'skok do obslugi wyswietlaczy i klawiatury End If 'jesli wysłano na wyswietlacz to If Ustaw = 1 Then 'zgas miganie Set Portb.7 End If If C1 = 10 And C2 = 10 And C3 = 10 Then 'chyba ze wylaczony wyswietlacz to Reset Portb.7 'włącz diody na stałe End If Loop End '**************************** 'Liczba '**************************** Numer: 'wpisywanie kolejnych cyfr na wyswietlacze If F100ms = 1 And Licznik = 0 Then 'zabezpieczenie styków przez 100ms C1 = Cyfra C2 = 10 'ukrywanie zera wiodacego C3 = 10 'ukrywanie zera wiodacego Incr Licznik 'ilosc cyfr (dodano pierwszą) Reset F100ms End If If F100ms = 1 And Licznik = 1 Then C2 = C1 'przesuwa cyfrę 1 na wyswietlaczu C1 = Cyfra C3 = 10 'ukrywanie zera wiodacego Incr Licznik 'dodano drugą cyfrę Reset F100ms End If If F100ms = 1 And Licznik = 2 Then C3 = C2 'przesuwa cyfrę 1 C2 = C1 'przesuwa cyfrę 2 C1 = Cyfra Incr Licznik 'dodaje trzecia cyfre Reset F100ms 'jesli tu zwiekszy do 4 to blokuje wpisywanie End If Return '**************************** 'Przerwanie timer0 '**************************** Przerwanie0: Timer0 = 130 'laduje timer i zostaje 55 do przepełnienia Set F4ms 'ustawia flagę (podstawowa jednostka czasu) Incr Dziel If Dziel = 120 Then Dziel = 0 'jesli 250 przepelnien to 100ms i ustaw flagę Set F100ms If Ustaw = 0 Then 'jesli wpisywanie cyfr to migaj Portb.7 = Not Portb.7 'migajace kropki przy niezatwierdzonych End If End If Return '**************************** 'wyswietlanie '**************************** Wyswietl: Incr Mux 'kolejne wyswietlacze i czesci klawiatury If Mux = 3 Then Mux = 0 Select Case Mux Case 0: Set Portb.0 'zgas wyswietlacz 1 Portd = Lookup(c3 , Tabela) 'ustaw port w BCD dla wysw.3 Reset Portb.2 Waitms 1 'deelay potrzebny naustawienie sie portu If Pinb.3 = 0 Then 'odczyt klawiatury Cyfra = 1 Gosub Numer 'skok do wprowadzania liczby (1-3 cyfrowej) End If If Pinb.4 = 0 Then Cyfra = 4 Gosub Numer End If If Pinb.5 = 0 Then Cyfra = 7 Gosub Numer End If If Pinb.6 = 0 Then 'kasuje wyswietlacz i umozliwia nowy wpis bo licznik=0 C1 = 0 C2 = 0 C3 = 0 Licznik = 0 Cyfra = 0 Reset Ustaw 'włącza miganie End If Case 1: Set Portb.2 Portd = Lookup(c2 , Tabela) Reset Portb.1 Waitms 1 If Pinb.3 = 0 Then Cyfra = 2 Gosub Numer End If If Pinb.4 = 0 Then Cyfra = 5 Gosub Numer End If If Pinb.5 = 0 Then Cyfra = 8 Gosub Numer End If If Licznik > 0 Then 'nie pozwala wpisac zera jako pierwszego If Pinb.6 = 0 Then Cyfra = 0 Gosub Numer End If End If Case 2: Set Portb.1 Portd = Lookup(c1 , Tabela) Reset Portb.0 Waitms 1 If Pinb.3 = 0 Then Cyfra = 3 Gosub Numer End If If Pinb.4 = 0 Then Cyfra = 6 Gosub Numer End If If Pinb.5 = 0 Then Cyfra = 9 Gosub Numer End If If Pinb.6 = 0 Then 'jesli nacisniety # Set Ustaw 'wylacz miganie Gosub Rs_wyslij 'wyslij wartosci kolejnych cyfr Licznik = 4 'nie pozwol wpisywac cyfr do skasowania licznika If C1 = 0 And C2 = 0 And C3 = 0 Then 'jesli trzy zera i # to gas wyswietlacze C1 = 10 C2 = 10 C3 = 10 End If End If End Select Return '********** Wysylanie RS ********* Rs_wyslij: Set Portd.2 Send = 10 + C1 'dodaj 10 co znaczy jednosci Printbin Send Send = 20 + C2 'dodaj 20 co znaczy dziesiatki If Licznik = 1 Then Send = Send - 10 'odejmuje 10 dodane przez licznik by zgasic pierwszy End If Printbin Send Send = 30 + C3 ' dodaj 30 co znaczy setki If Licznik = 1 Or Licznik = 2 Then Send = Send - 10 End If Printbin Send Reset Portd.2 Return '********** Wysylanie RS koniec ********* '******************************************************************************* 'Tabele do wyswietlania na wyswietlaczu '******************************************************************************* Tabela: Data 0 , 8 , 16 , 24 , 32 , 40 , 48 , 56 , 64 , 73 , 255 'znak: 0 1 2 3 4 5 6 7 8 9 10 PortD ->kod BCD dla UCY7447 Jak widać na schemacie użyto też dekodera kodu BCD UCY 7447 CEMI Całość działa w kościele już od jakiegoś czasu. Zrobię zdjęcia to dołożę. Aha..Układ działał na wewnętrznym kwarcu bezproblemowo(dlatego oszczedziłem sobie na schemacie)..ale był już kwarc w oryginale więc dla pewności transmisji po RS przerabiając układ resetu podmieniłem kwarc na 4MHz.
|
|||
Jestem zainteresowany odbiornikiem
Witam . Chciałbym wykorzystać ten wspaniały projekt do mojego pieca CO . Mam kotłownie oddaloną około 10 m i jest utrudniony sposób kontroli nastaw i odczyt w domu . Ten projekt idealnie by mi "pasił" oczywiście z wprowadzonymi zmianami . Proszę kolegę o źródło i schemat odbiornika .
Proszę bardzo..
Akurat wczoraj miałem czas by dalej "trenować" rysowanie schematów w DesignSpark i mam gotowca :D
Jako że rysowałem z pamięci i tylko dla nabrania wprawy, na schemacie mogą się niezgadzać wyprowadzenia do poszczególnych segmentów LED. To specyficzny sprzęt kościelny :D Ma za zadanie wyświetlać numer pieśni na DUŻYM wyświetlaczu tak by był widoczny na cały kościół. Dlatego diody w odbiorniku sa połączone szeregowo i zasilane 14V. Ich sterowaniem zajmuje się ULN 2003, a +14V na każdy wyświetlacz posyłane jest przez 2 tranzystory. Dałbym tam np. BS108 , ale jak napisałem wcześniej miałem to tylko naprawić. Poniżej moje wczorajsze wypociny, czyli cały schemat.
Tu króciutki kod odbiornika.
Teraz kilka słów o transmisji po RS485. Nic o niej wcześniej nie wiedziałem więc musiałem doczytać.
Jesli masz tylko dwie kostki do skomunikowania to nie trzeba się martwić żadnym adresowaniem. Łaczy się tak samo jak MAX323 z tą różnica że nadając ustawia się wysoki stan na nóżce odpowiadającej za nadawanie. Jeśli odbiornik ma tylko odbierać i wyswietlac to pewnie można ja do masy na stałe połączyć. W odbiorniku i nadajniku pomiedzy przewodami linii A i B znajdują się rezystory (zakończenia linii). W Twoim więc przypadku może po prostu skorzystać z projektu wyświetlacza na RS232 i zamiast MAX232 wsadzić SN75176BP (odpowiednik MAX485) i przy nadawaniu tylko dołożyc jeden port procesora w procedurze Rs_wyslij.
Ten projekt przedstawiłem jako ciekawostkę oszczędności wyprowadzeń procesora. Mając na celu zdalny odczyt parametrów napisałbym to inaczej. Chyba że kolega chce sterować piecem z daleka :D
Ten projek może być wstępem do jakiegoś wyświetlacza na hali sportowej ..
BARTek
Moja strona
Dziękuję za całość
Bardzo dziękuję koledze za poświęcenie czasu i przesłanie strony odbiorczej . W domu ma być tylko wyświetlacz kontrolny informujący o nastawach i pracy kotła. Pod koniec miesiąca mam trochę wolnego czasu i zabieram się za pracę . Jako wyświetlacz chcę mieć LCD bo więcej można wyświetlić informacji .
Rewelacja!
W końcu trafiłem we właściwe miejsce. Ponieważ znajomy prosił mnie o zrobienie takiego sterownika (i to właśnie do kościoła!), a specjalnie nie mam aż takiej wiedzy w programowaniu, postanowiłem poszukać i... znalazłem!
Pytanie tylko mam takie, czy jest to duży kłopot z dostosowaniem kodu pod Arduino (wolałbym iść w tym kierunku)?? Elektronicznie dałbym radę.
Pozdrawiam.
Odp. Sterownik kościelnego wyświetlacza
Projektem bawiłem się dość dawno i może teraz kilka rzeczy napisałbym inaczej :D
Co do Arduino, nie mam czasu by to przepisać, ale może ktoś Ci to przepisze.
W sumie Demo Bascom kompiluje kod do 4kB a Tiny2313 ma tylko 2kB :D
Ściągasz Demo, kompilujesz, wgrywasz do Tiny i gotowe. Ewentualnie mogę Ci to skompilować i załączyć gotowe pliki HEX
BARTek
Moja strona