Witem forumowiczów. $large Config Lcd = 16 * 2 Config Timer1 = Timer , Gate = Internal , Mode = 1 Config Sda = P3.1 Config Scl = P3.0 Dim Licz As Byte Dim I As Byte Dim Nast(5) As Byte Dim St As String * 7 Dim W_reg As Integer Dim Wielk1 As Byte Dim Wielk2 As Byte Dim X As Byte Dim Value As Byte Dim Adres As Byte Dim S As Byte Dim We As Bit Dim A As Byte Dim C As Byte Dim Flaga1 As Bit Dim Kod As Byte Dim Vp As Byte Dim Vl As Byte Dim Xxx As Byte Deflcdchar 0 , 1 , 2 , 2 , 4 , 4 , 2 , 2 , 1 Deflcdchar 1 , 5 , 10 , 18 , 20 , 20 , 18 , 10 , 5 Deflcdchar 2 , 16 , 8 , 8 , 4 , 4 , 8 , 8 , 16 Deflcdchar 3 , 20 , 10 , 9 , 5 , 5 , 9 , 10 , 20 S1 Alias P3.7 S2 Alias P3.5 S3 Alias P3.4 Declare Sub Zmien() Declare Sub Regul Declare Sub Wys(st As String * 8) Declare Sub Przedz Declare Sub Wyslij(kod As Byte , Adres As Byte , Value As Byte) Declare Sub Warunk(a As Byte , C As Byte) Declare Sub Read_i(adres As Byte , Value As Byte) Declare Sub Up Declare Sub Down Declare Sub Wejscie On Timer1 Timer1_int On Int1 Mute Enable Int1 Enable Timer1 Enable Interrupts 'Poczatek programu Cursor Off Noblink Counter1 = 4150 Licz = 0 Cls Lcd "** Ver. 1.00 **" Wait 2 Cls Set S1 Set S2 Set S3 Set P3.2 Set P3.3 Call Read_i 15 , Value ' odczyt danych z eeprom If Value = 60 Then Call Read_i 2 , Value Nast(1) = Value Call Read_i 3 , Value Nast(2) = Value Call Read_i 5 , Value Nast(3) = Value Call Read_i 6 , Value Nast(5) = Value Call Read_i 8 , Value S = Value Else 'jezeli brak pamieci to ponizsze parametry zmiennych Nast(1) = 6 'bass Nast(2) = 6 'treble Nast(3) = 10 'baland Nast(4) = 1 'efekty Nast(5) = 40 'volume S = &B11001110 End If Nast(4) = S And &B00011000 ' odpowiednie ustawienie rodzaju efektu Rotate Nast(4) , Right , 3 Vl = 0 ' odpowiednie ustawienia balansu Vp = 0 If Nast(3) >= 10 Then Vp = Nast(3) - 10 Else Vl = 10 - Nast(3) End If I = 5 Call Zmien ' wywolanie procedury wpisujacej dane do eeprom i procesora dzwieku Counter1 = 4150 Do 'petla glowna programu While S.5 = 1 ' jezeli s.5=1 to wyswietl mute Lcd "MUTE" Wend Waitms 220 If S1 = 0 Then ' przycisk mode Incr I If I = 6 Then I = 1 End If Call Zmien Bitwait S1 , Set End If If S3 = 0 Then 'przycisk down Decr Nast(i) Call Zmien End If If S2 = 0 Then ' przycisk up Incr Nast(i) Call Zmien End If If P3.2 = 0 Then ' przycisk wejscie Call Wejscie Bitwait P3.2 , Set End If Loop End Sub Zmien If I <> 5 Then Licz = 0 Start Timer1 ' uruchamia timer End If Cls We = S.0 Wielk2 = 1 If I = 1 Then ' bass Wielk1 = 12 Call Przedz Call Wys( "Bass:") Call Przelicz Call Regul Elseif I = 2 Then ' treble Wielk1 = 11 Call Przedz Call Wys( "Treble:") Call Przelicz Call Regul Elseif I = 3 Then ' balans Vl = 0 Vp = 0 Wielk1 = 20 Wielk2 = 0 Call Przedz Call Wys( "Balans:") If Nast(3) >= 10 Then Vp = Nast(3) - 10 Else Vl = 10 - Nast(3) End If Lowerline Lcd " " : Lcd Vl : Lcd "-" : Lcd Vp Elseif I = 4 Then ' effect Wielk1 = 4 Wielk2 = 255 Call Przedz Call Wys( "Effect:") Waitms 50 Lowerline If Nast(4) = 0 Then Lcd "Mono" Reset S.3 Reset S.4 Elseif Nast(4) = 1 Then Lcd "Liniowe St" Reset S.4 Set S.3 Elseif Nast(4) = 2 Then Lcd "Pseud St" Set S.4 Reset S.3 Elseif Nast(4) = 3 Then Lcd "Przest St" Set S.3 Set S.4 End If Elseif I = 5 Then ' volume Wielk1 = 64 Stop Timer1 ' zatrzymanie timera Counter1 = 4150 Call Warunk(21 , 28) Call Warunk(27 , 20) Call Warunk(19 , 20) Call Przedz Call Wys( "Volume:") Call Przelicz W_reg = Nast(5) - 60 ' przelicza wartosci binarne na odpowiadajace im wartosci dB W_reg = W_reg * 2 Locate 2 , 1 : Lcd "Input: " : Lcd We : Lcd " " If Nast(4) = 0 Then Lcd Chr(0) : Lcd Chr(2) Elseif Nast(4) = 1 Then Lcd Chr(1) : Lcd Chr(3) Elseif Nast(4) = 2 Then Lcd "-" : Lcd Chr(1) : Lcd Chr(3) : Lcd "-" Elseif Nast(4) = 3 Then Lcd "+" : Lcd Chr(1) : Lcd Chr(3) : Lcd "+" End If Call Regul End If W_reg = Nast(5) - 27 ' obliczanie odpowiednio balansu If Vl = 9 Then A = 0 Else A = 10 - Vl End If W_reg = W_reg * A Xxx = W_reg / 10 A = Xxx + 27 W_reg = Nast(5) - 27 If Vp = 9 Then C = 0 Else C = 10 - Vp End If W_reg = W_reg * C Xxx = W_reg / 10 C = Xxx + 27 For Kod = 130 To 160 Step 30 ' zapis danych do pamieci i procesora dzwieku Call Wyslij Kod , 2 , Nast(1) Call Wyslij Kod , 3 , Nast(2) Call Wyslij Kod , 0 , C Call Wyslij Kod , 1 , A Call Wyslij Kod , 8 , S Next Kod Call Wyslij 160 , 5 , Nast(3) Call Wyslij 160 , 6 , Nast(5) Call Wyslij 160 , 15 , 60 End Sub Sub Wys (st As String * 8) ' wyswietla na wyswietlaczu zmienna st Cls Lcd St End Sub Sub Regul ' dba o odpowiednie wyswietlanie ujemnych i dodatnich liczb If W_reg < -9 Then X = 12 Elseif W_reg < 0 Then X = 13 Elseif W_reg > 9 Then X = 13 Elseif W_reg >= 0 Then X = 14 End If Locate 1 , X : Lcd W_reg : Lcd "dB" End Sub Sub Przelicz ' przelicza wartosci binarne bass i treble na odpow. im wart. w dB W_reg = Makedec(w_reg) If I = 1 Or I = 2 Then W_reg = Nast(i) * 3 W_reg = W_reg - 18 End If End Sub Sub Przedz ' okresla zakresy wyswietlanych liczb If Nast(i) = Wielk1 Then Nast(i) = Nast(i) - 1 End If If Nast(i) = Wielk2 Then Nast(i) = Wielk2 + 1 End If End Sub Sub Warunk(a As Byte , C As Byte ) ' warunek dba o wyswietlanie odpowiednich wartosci glosnosci If Nast(i) = A Then Nast(i) = C End If End Sub Sub Wejscie ' przelacza wejscia 0 na 1 i odwrotnie If S.0 = 1 Then Reset S.0 Else Set S.0 End If Call Zmien End Sub Mute: ' przerwanie funkcji mute If S.5 = 0 Then Set S.5 Else Reset S.5 End If Call Zmien Bitwait P3.3 , Set Waitms 250 Return Sub Wyslij (kod As Byte , Adres As Byte , Value As Byte) ' wysyla dane przez i2c I2cstart I2cwbyte Kod I2cwbyte Adres I2cwbyte Value I2cstop Waitms 10 End Sub Sub Read_i(adres As Byte , Value As Byte) ' odbiera dane i2c I2cstart I2cwbyte 160 I2cwbyte Adres I2cstart I2cwbyte 161 I2crbyte Value , 9 I2cstop End Sub Timer1_int: ' dba o odpowiednie odliczenie czasu po ostatnim nacisnieciu przycisku Counter1 = 4150 If Licz = 75 Then I = 5 Call Zmien End If Incr Licz Start Timer1 Return Bascom krzyczy, że nie wie o co chodzi przy konfiguracji timera, jak to wykomentuję, to ma też problem z którąś funkcją, że niby nie jest zadeklarowana. Ja ogólnie nie orientuję się na bascomie, bo do tej pory kodowałem w C.
|
|||
Re: AVT3008 89C4051 -> Attiny2313 - konwersja kodu
Co do konfiguracji timera to napisz tak:
gdzie x to numer timera a y podział (może być 1, 8, 64, 256, 1024)
Co do deklaracji czegoś tam to musisz podać dokładnie ocb?
Moja strona w powijakach
Z tego co się dopatrzyłem w
Z tego co się dopatrzyłem w dokumentacji 89C4051, a w zasadzie nie dopatrzyłem się to on nie ma dzielników do licznika, więc ustawię PRESCALE = 1.
Dalej kompilator zgłasza takie błędy:
"TYPE expected [STRING*8]" dla linii
oraz "SUB or FUNCTION not DECLARED [READ_I 15 , VALUE]" dla linii
to jest pierwsze wywołanie tej procedury.
Re: AVT3008 89C4051 -> Attiny2313 - konwersja kodu
Co ile ma być wywoływane przerwanie od timera? Podam Ci co trzeba wpisać.
Ogólnie dla mnie niezrozumiale jest napisanie np czegoś takiego:
W życiu czegoś takiego nie widziałem i nie wiem jaką ma pełnić funkcję?
Moja strona w powijakach
Dokładnie to nie wiem co ile
Dokładnie to nie wiem co ile ma być to przerwanie od timera, jedyne czym dysponuję to opis kitu z avt i kod który ściągnąłem ze strony edw. Ta procedura którą cytujesz służy do obsługi scalaka TDA8425 po magistrali I2C. Mirley opisał nawet jego obsługę. Mi na razie staje kompilator na wcześniej wymienionych błędach i nie mam pojęcia o co mu chodzi.
Jakbyś mógł to wrzucić u siebie w bascoma i zobaczyć czy da się to skompilować to byłbym bardzo wdzięczny matrix0606 albo ktokolwiek :)
W ogóle jest sporo rzeczy do
W ogóle jest sporo rzeczy do zmiany. Na przykład w bascom avr nie konfiguruje się portów w ten sposób bo będzie wywalać błędy:
Trzeba napisać konkretnie, na przykład
Tak samo nie można napisać:
Trzeba napisać konkretnie:
Oczywiście wszystko to przykład bo całość czyli konfiguracja pinów będzie zależeć od tego gdzie co podepniesz. Jak nie poczytasz o bascom avr to nic z tego nie będzie, bo oznaczało by to napisanie dla Ciebie prawie od nowa kodu do obsługi tego przedwzmacniacza.
Poza tym co tylko usunę jeden błąd to kompilator wywala następny. Tak czy siak pewnie trzeba będzie napisać kod od nowa.
Moja strona w powijakach
O pinach to akurat wiem, i
O pinach to akurat wiem, i pozmieniałem numery tak, żeby wszystkie wyprowadzenia były w odpowiednich miejscach. Czy u Ciebie też wywala te same błędy o których wcześniej wspomniałem? Mam namyśli deklarację procedury wysyłającej dane na wyświetlacz i to wywołanie tej drugiej procedury.
Re: AVT3008 89C4051 -> Attiny2313 - konwersja kodu
Wywala dokładnie te same błędy. Musisz dobrze przestudiować obsługę którą podał Mirek i zmienić tak żeby to działało.
Moja strona w powijakach
Rozumiem też, że nie wiesz
Rozumiem, że nie wiesz jak je skorygować ;/
Ja myślę, że tu nie chodzi o samą implementację obsługi tego TDA, tylko o składnie kodu, która trochę się różni między rdzeniami '51 i AVR. W końcu po to są jeżyki wysokiego poziomu, żeby kod był przenośny.
Re: AVT3008 89C4051 -> Attiny2313 - konwersja kodu
Ciężko powiedzieć czy nie wiem, bo nie bardzo chce mi się do tego zasiadać. U mnie zawsze wszystko wychodzi w praniu. Wiem że sporo zmian będzie.
Moja strona w powijakach
Re: konwersja kodu
Takie działanie nie ma sensu... program i tak nie zmieści się w tiny2313, bo w 89C4051 zajmował grubo ponad 2k
Radził bym zająć się napisaniem prostszej wersji tego programu w oparciu o to co napisalem na stronie. Popatrz na mój przedwzmacniacz cyfrowy, tam jest prawie cały program tylko trzeba by dopisac LCD
instrukcje declare sub to deklaracja podprogramu.... ponieważ sam miałem problemy żeby skompilować kod z podprogramami to osobiście zawsze używam etykiet gosub
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Czy program na mikrokontroler 89C4051 ma jakiś błąd?
Wcześniej też próbowałem przenieść kod z kości 89C4051 na Attiny3213, i dostawałem te same błędy kompilacji podane wcześniej przez innych. Ale jak Mirek wspomniał, że nie ma sensu przenosić ten kod na kość Attiny3213, bo i tak nie zmieści się w jej pamięci, to dałem spokój.
Robiłem to, bo chciałem znaleźć ewentualny błąd w programie powodujący, że nie działa mi jeden kanał w kicie AVT-3008. Sprawdzałem wszystko dokładnie na płytce, nie było żadnych zwarć. Nie podejrzewam uszkodzenia TDA8425, bo od początku był na podstawce. Nigdzie w internecie nie znalazłem rozwiązania tego problemu. Spotkałem na forum gościa, który miał ten sam problem, ale też nie podał rozwiązania, jedynie podejrzewał błąd w programie.
Zauważyłem, że podany na górze program na kość Atmela 89C4051 nie posiada procedur inicjacji I2C, tj I2CINIT. Wiem, że dla rdzenia AVR powinno się stosować się tę procedurę, ale nie wiem, czy to także dotyczy rdzenia 51.
Moje dodatkowe pytanie:
Czy istnieje jakaś możliwość zainstalowania BASCOM-AVR i BASCOM-8051 na platformie Windows7?
Dziękuję z góry za odpowiedzi.
Ryszard z Wrocławia
GG: 2272319
Dzięki Mirley, nie
Dzięki Mirley, nie pomyślałem, że ten kod nie zmieści się w attiny. Będę kombinował, żeby coś po swojemu napisać, jak skończę to pewnie się pochwalę :)
@rysiek55 ja BASCOM-AVR bez problemu zainstalowałem na win7 - producent podaje że jest kompatybilny z vistą, więc z 7 nie powinno być problemów i u mnie nie było.
Dzięki MrDoctor
Już wiem doc o tym, bo też zainstalowałem go przed godzinę, ale tylko Bascom-AVR. W dalszym ciągu nie mogę zainstalować na Win7 wersji Bascomu-8051. Potrzebuję tej wersji, gdy próbuję coś zrobić z kostką 89C4051.
Ryszard z Wrocławia
GG: 2272319
pytanie
mam takie zapytanie czy ktoś przerobił ten program na attini 2313 bo ma ten układ od dłuższego czasu i właśnie mi nie działa i natrafiłem na ten temat wiem że stary ale może ma ktoś jeswzcze ten program??