Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Prośba do posiadaczy FULL wersji bascoma

lotnick
-
-
Posty: 66
Rejestracja: 19 lip 2005, o 13:09
Lokalizacja: Sosnowiec
Kontaktowanie:

Prośba do posiadaczy FULL wersji bascoma

Postautor: lotnick » 13 lis 2008, o 09:36

Witam.
Piszę programik który coraz bardziej się rozrasta. Teraz ma już koło 4kB i zaczynają się dziać cuda. Nie wiem czy to moja wina czy kompilatora czy tego że DEMO nie informuje o przekroczeniu 4kB i cośtam sobie kompiluje. Jeśli problem tkwi w magicznych 4kB to kupię pełną wersję bo czas na to najwyższy, ale jeśli to BUGi to przesiadam się na C.
Dla jasności zamieszcze kod tutaj jeśli znajdzie się ktoś kto pomoże. Program nie robi na razie nic ciekawego więc jego kompilacja nie będzie miała skutków zarobkowych :-/ .
Kompilację chcę tylko przeprowadzić by sprawdzić przyczyny niepowodzenia.
pzdr.
Michał

K_o_n_r_a_d
-
-
Posty: 58
Rejestracja: 30 lip 2005, o 00:36
Lokalizacja: Lublin

Postautor: K_o_n_r_a_d » 13 lis 2008, o 21:04

Na 99% jest to Twoja wina :)
Gdzie jest ten kod programu? Ja nie widzę.

lotnick
-
-
Posty: 66
Rejestracja: 19 lip 2005, o 13:09
Lokalizacja: Sosnowiec
Kontaktowanie:

Postautor: lotnick » 13 lis 2008, o 21:28

Napisałem, że zamieszczę, JEŚLI znajdzie się ktoś kto mi skompiluje. Nie ma sensu śmiecić.Próbowałem już wiele rzeczy minimalizować w programie i wygląda na to że to kwestia właśnie tych 4kB.
Np zamiast
LCD"Podaj parametr"
pisałem
LCD "p?"
I stosowałem różne podobne sztuczki aż zszedłem z 4,4kB do ~4kB i zaczęło działać. Dla pewności chciałbym skompilować całość.

K_o_n_r_a_d
-
-
Posty: 58
Rejestracja: 30 lip 2005, o 00:36
Lokalizacja: Lublin

Postautor: K_o_n_r_a_d » 13 lis 2008, o 21:36

Jak chcesz to mogę skompilować.
Dawno nie używałem wersji demo a jak pamiętam był jakiś komunikat, że przekroczono, wtedy kiedy używałem jeszcze było 2kB programu wynikowego i po prostu nie kompilował.

Awatar użytkownika
j_bravo
-
-
Posty: 189
Rejestracja: 14 wrz 2005, o 16:30
Lokalizacja: Lublin
Kontaktowanie:

Postautor: j_bravo » 14 lis 2008, o 16:03

wyślij mi to ci skompiluje

lotnick
-
-
Posty: 66
Rejestracja: 19 lip 2005, o 13:09
Lokalizacja: Sosnowiec
Kontaktowanie:

Postautor: lotnick » 14 lis 2008, o 20:21

To już wyślę w poniedziałek z pracy bo w domu tego nie mam. Dopiero teraz odczytałem
A swoją drogą to jak wam się prqcuje z Bascomem w większych projektach? Nie ma jakichś tajemnych, zaskakujących problemów nie do rozwiązania?

K_o_n_r_a_d
-
-
Posty: 58
Rejestracja: 30 lip 2005, o 00:36
Lokalizacja: Lublin

Postautor: K_o_n_r_a_d » 14 lis 2008, o 20:39

Nie ma problemów a jak się jakieś pojawiają to i tak się okazuje, że z własnej winy, przeoczenia itp.

Jedyny problem jaki zauważam, co akurat bardzo przeszkadza to to, że Bascom nie rozumie rozwiniętych działań typu: a=b*c+d i trzeba to rozbijać "ręcznie". Ale to i to samo masz w wersji demo.

Awatar użytkownika
j_bravo
-
-
Posty: 189
Rejestracja: 14 wrz 2005, o 16:30
Lokalizacja: Lublin
Kontaktowanie:

Postautor: j_bravo » 14 lis 2008, o 22:42

Im większy projekt tym więcej problemów ;)

lotnick
-
-
Posty: 66
Rejestracja: 19 lip 2005, o 13:09
Lokalizacja: Sosnowiec
Kontaktowanie:

Postautor: lotnick » 18 lis 2008, o 12:07

Za parę dni będę miał pełną wersję. Swoją drogą zamówiłem od Holendrów za 79euro bez problemu, a w Polsce chcą 100euro. :632:

Jak wam się będzie chciało to skompilujcie mi takie coś:

Kod: Zaznacz cały

$regfile = "m32def.dat" $crystal = 8000000 $hwstack = 100 '32standardowo $swstack = 100 '8standardowo $framesize = 100 '24standardowo Config Pind.0 = Input Config Pind.1 = Input Config Pind.2 = Input Set Portd.0 Set Portd.1 Set Portd.2 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Porta.5 , Db5 = Porta.4 , Db6 = Porta.3 , Db7 = Porta.2 , E = Portc.7 , Rs = Portc.6 Cursor Off Dim Parametr1 As Byte , Dim Parametr2 As Byte Dim Menu_poz As Byte 'okresla aktualna pozycje w menu Dim Par1_set As Bit Dim Par2_set As Bit Dim Praca As Bit Dim Wstrzymano As Bit Wait 1 Enable Interrupts Config Int0 = Falling Enable Int0 On Int0 Zatwierdzone Cls Wait 1 Upperline Lcd "Komunikat" Lowerline Lcd "Powitalny" Wait 2 Goto Menu_startowe Menu_startowe: Par1_set = 0 Par2_set = 0 Praca = 0 Wstrzymano = 0 Cls Lcd "Parametr1?" Lowerline Lcd Parametr1 ; "%" Menu_poz = 1 Do Debounce Pind.0 , 0 , Wiecej_par1 , Sub Debounce Pind.1 , 0 , Mniej_par1 , Sub Loop Until Par1_set = 1 Cls Upperline Lcd "parametr2??" Lowerline Lcd Parametr2 , "sek" Menu_poz = 2 Do Debounce Pind.0 , 0 , Wiecej_par2 , Sub Debounce Pind.1 , 0 , Mniej_par2 , Sub Loop Until Par2_set = 1 Cls Lcd " Grzejemy?" Lowerline Lcd " ENTER-START" Menu_poz = 3 Do Debounce Pind.0 , 0 , Wstrzymanie , Sub Debounce Pind.1 , 0 , Wstrzymanie , Sub If Wstrzymano = 1 Then Goto Menu_startowe End If Loop Until Praca = 1 Cls Lcd "praca" Lowerline Lcd "Par1=" ; Parametr1 ; " Par2=" ; Parametr2 End Wiecej_par1: Parametr1 = Parametr1 + 10 Cls Lcd "parametr1?" Lowerline Lcd Parametr1 ; "%" Return Mniej_par1: Parametr1 = Parametr1 - 10 Cls Lcd "parametr1?" Lowerline Lcd Parametr1 ; "%" Return Wiecej_par2: Parametr2 = Parametr2 + 10 Cls Lcd "parametr2?" Lowerline Lcd Parametr2 ; "sek" Return Mniej_par2: Parametr2 = Parametr2 - 10 Cls Lcd "parametr2?" Lowerline Lcd Parametr2 ; "sek" Return Wstrzymanie: Wstrzymano = 1 Return Zatwierdzone: Disable Int0 If Menu_poz = 1 Then Par1_set = 1 End If If Menu_poz = 2 Then Par2_set = 1 End If If Menu_poz = 3 Then Praca = 1 End If Enable Int0 Return
Jakby wyszło to ok, chociaż jak znam siebie to poprzez to poprawianie i tak zrobiłem jakieś błędy i może nie ruszyć nie tylko ze względu na 4kb.
NAjwyżej będę męczył już na swoim kompie.
Pzdr

K_o_n_r_a_d
-
-
Posty: 58
Rejestracja: 30 lip 2005, o 00:36
Lokalizacja: Lublin

Postautor: K_o_n_r_a_d » 18 lis 2008, o 12:26

Skompilowało się, ale program... jest napisany w zły sposób. Za dużo tłumaczyć co nie jest poprawne - przede wszystkim brak pętli głównej programu itd.
Proponuję Ci przeczytać jakąś książkę o programowaniu uK. Do Bascoma najlepsza jest: Mikrokontrolery dla początkujących
ewentualnie: Programowanie mikrokontrolerów AVR w języku Bascom
Pierwsza jest lepsza.

W załączniku skompilowany powyższy program. Nie zajmuje nawet 2kB więc w wersji demo też skompiluje się.
Załączniki
Nowy folder (2).rar
(9.77 KiB) Pobrany 293 razy

lotnick
-
-
Posty: 66
Rejestracja: 19 lip 2005, o 13:09
Lokalizacja: Sosnowiec
Kontaktowanie:

Postautor: lotnick » 18 lis 2008, o 13:43

Dzięki.
Chętnie posłucham co nie jest poprawne.
Jeśli chodzi o pętlę główną to po pierwsze program ten jest po to by sprawdzić konkretne zachowanie, po drugie docelowy wcale nie ma działać w pętli. Skąd taka zasada że ma być pętla główna?
Książkę mam, bo przecież nie urodziłem się z podstawową wiedzą bascomową(mam drugą).
Nie wiem jak u Ciebie zajmuje 2kB bo u mnie ponad 5kb a plik BAS 2,5kb.

Na razie to mam problem bo resetuje się na linii(tzn po naciśnięciu przycisku )

Kod: Zaznacz cały

Debounce Pind.1 , 0 , Mniej_par2 , Sub
Wg mnie bez powodu...

K_o_n_r_a_d
-
-
Posty: 58
Rejestracja: 30 lip 2005, o 00:36
Lokalizacja: Lublin

Postautor: K_o_n_r_a_d » 18 lis 2008, o 13:51

Program dochodzi do:

Kod: Zaznacz cały

Cls Lcd "praca" Lowerline Lcd "Par1=" ; Parametr1 ; " Par2=" ; Parametr2 End
i co dalej? Nie wiadomo. Może się zawiesi a może będzie chodził jakoś inaczej.
Pisząc pętla główna nie mam na myśli tego, że cały program ma działać w pętli, ale nie ma być możliwości działania nieprzewidzianego.
Zrób tak:

Kod: Zaznacz cały

Cls Lcd "praca" Lowerline Lcd "Par1=" ; Parametr1 ; " Par2=" ; Parametr2 Do : Loop End
i już jest pętla główna.
Ostatnio zmieniony 18 lis 2008, o 14:00 przez K_o_n_r_a_d, łącznie zmieniany 2 razy.

lotnick
-
-
Posty: 66
Rejestracja: 19 lip 2005, o 13:09
Lokalizacja: Sosnowiec
Kontaktowanie:

Postautor: lotnick » 18 lis 2008, o 13:58

Przecież jest na końcu END.
Program się kończy i procesor nie robi nic. Zegar chodzi, nic się nie dzieje- nie można tak?

Skompilowałem u siebie i efekt ten sam jest, więc zamieniłem miejscami dwa podprogramy:

Kod: Zaznacz cały

Mniej_par2: Parametr2 = Parametr2 - 10 Cls Lcd "parametr2?" Lowerline Lcd Parametr2 ; "sek" Return Wiecej_par2: Parametr2 = Parametr2 + 10 Cls Lcd "parametr2?" Lowerline Lcd Parametr2 ; "sek" Return
Teraz program się resetuje jak nacisnę drugi guzik. Niespodzianka...

K_o_n_r_a_d
-
-
Posty: 58
Rejestracja: 30 lip 2005, o 00:36
Lokalizacja: Lublin

Postautor: K_o_n_r_a_d » 18 lis 2008, o 14:01

Aha już wiem skąd bierzesz 5kB. Sprawdzasz wielkość pliku *.hex, ale to nie o to chodzi. Plik *.hex nie jest plikiem który wgrywa się bezpośrednio do uK. Ten plik zawiera jeszcze dodatkowe dane typu sumy kontrolne. Każdy wrywany bajt do uK jest w nim zapisany jako tekst zawierający reprezentację szesnastkową każdego kolejnego bajtu programu wynikowego + sumę kontrolną.
Plik *.bin jest plikiem który się wgrywa bezpośrednio do uK.

W Bascomie jak klikniesz "Show result", w wyświetlonym raporcie masz podany rozmiar wynikowego programu
Ostatnio zmieniony 18 lis 2008, o 14:13 przez K_o_n_r_a_d, łącznie zmieniany 2 razy.

lotnick
-
-
Posty: 66
Rejestracja: 19 lip 2005, o 13:09
Lokalizacja: Sosnowiec
Kontaktowanie:

Postautor: lotnick » 18 lis 2008, o 14:12

Ten problem zostawiłbym na drugi plan.
Niedługo będę miał FULL i nie będize kłopotu.

Zrobiłem tak jak mówiłeś i rzeczywiście pętla coś zmienia.
Już się nie resetuje, ale w pętli wyświetlania parametru2 przy klikaniu nieszczęśliwego przycisku pojawia się wartość zero zamiast prawdziwej wartości. Jak potem wyśietlam parametr 2 to już pokazuje jego wartość prawdziwą.DZiwne


Zmieniłem

Kod: Zaznacz cały

Lcd Parametr2; "sek"
na

Kod: Zaznacz cały

Lcd Parametr2 lcd "sek"
i znowu sie resetuje.
Poj...ane
Ostatnio zmieniony 18 lis 2008, o 14:15 przez lotnick, łącznie zmieniany 1 raz.

K_o_n_r_a_d
-
-
Posty: 58
Rejestracja: 30 lip 2005, o 00:36
Lokalizacja: Lublin

Postautor: K_o_n_r_a_d » 18 lis 2008, o 14:14

Sprawdziłem, niby jest pętla pusta na końcu programu.

Kod: Zaznacz cały

CFFF RJMP PC-0x0000 Relative jump
Czyli chyba faktycznie samo END powinno zapętlić program.

Program nie tyle zawiesza się co kończy pracę. Wyjście z każdej pozycji w menu zrobiłeś pod jednym przyciskiem i obsługujesz go poprzez przerwania. Wciskasz przycisk raz - program przechodzi dalej, za chwilę puszczasz przycisk i drgania styków sprawiają, że automatycznie wychodzisz ze wszystkich kolejnych pozycji menu.
Musisz to rozwiązać inaczej, lub redukować drgania styków.
Proponuję całkowicie zlikwidować przerwania i zrobić to tak samo jak zmieniasz wartości.

lotnick
-
-
Posty: 66
Rejestracja: 19 lip 2005, o 13:09
Lokalizacja: Sosnowiec
Kontaktowanie:

Postautor: lotnick » 18 lis 2008, o 14:40

Ale problem nie pojawia się podczas używania przycisku powodującego przerwanie tylko właśnie podczas zmiany wartości przyciskami obsługiwanymi przez DEBOUNCE.

A teraz zauważyłem jeszcze,że jak w podprogramie zmienię:

Kod: Zaznacz cały

Lcd Parametr2 ; "sek"
na

Kod: Zaznacz cały

lcd"dupa"
to wszystko chodzi ok

lotnick
-
-
Posty: 66
Rejestracja: 19 lip 2005, o 13:09
Lokalizacja: Sosnowiec
Kontaktowanie:

Postautor: lotnick » 18 lis 2008, o 15:26

Czasami powody bywają zaskakujące.
instrukcje wyświetlania wywaliłem do głównego programu a w podprogramie dałem tylko załączenie flagi,że zmieniono wartości zmiennych. Teraz jeśli zmienię przyciskiem wartość to zostanie ona wyświetlona dopiero po powrocie z podprogramu.
Zmieniłem też INT0 na rising. Dzięki temu eliminuję sytuację, w której po wciśnięciu INT0 (pojawia się niski poziom) i wykonaniu podprogramu przerwania użytkownik puszcza przycisk i przy drganiu styków wywołuje niechcący przerwanie.
Miałem też duże kłopoty gdy przez pomyłkę wpisałem

Kod: Zaznacz cały

lcd"par1",par1
zamiast

Kod: Zaznacz cały

lcd"par1";par1
-czyli zamiast średnika przecinek.
NA razie hula.
Tutaj poprawione:

Kod: Zaznacz cały

$regfile = "m32def.dat" $crystal = 8000000 $hwstack = 200 '32standardowo $swstack = 200 '8standardowo $framesize = 200 '24standardowo Config Pind.0 = Input Config Pind.1 = Input Config Pind.2 = Input Set Portd.0 Set Portd.1 Set Portd.2 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Porta.5 , Db5 = Porta.4 , Db6 = Porta.3 , Db7 = Porta.2 , E = Portc.7 , Rs = Portc.6 Cursor Off Dim Parametr1 As Byte , Dim Parametr2 As Byte Dim Menu_poz As Byte 'okresla aktualna pozycje w menu Dim Par1_set As Bit Dim Par2_set As Bit 'okresla czy zatwierdzono dane temperatury i parametr2u Dim Praca As Bit Dim Wstrzymano As Bit Dim Wyswietlaj As Bit Wait 1 Enable Interrupts Config Int0 = Rising 'dopiero po puszczeniu przycisku bedzie przerwanie Enable Int0 On Int0 Zatwierdzone Config Debounce = 30 Cls Wait 1 Upperline Lcd "Komunikat" Lowerline Lcd "Powitalny" Wait 2 Goto Menu_startowe Menu_startowe: Par1_set = 0 Par2_set = 0 Praca = 0 Wstrzymano = 0 Wyswietlaj = 0 Cls Lcd "Parametr1?" Lowerline Lcd Parametr1 ; "%" Menu_poz = 1 Reset Wyswietlaj Do Debounce Pind.0 , 0 , Wiecej_par1 , Sub Debounce Pind.1 , 0 , Mniej_par1 , Sub If Wyswietlaj = 1 Then Cls Lcd "Parametr1?" Lowerline Lcd Parametr1 ; "%" End If Reset Wyswietlaj Loop Until Par1_set = 1 Cls Upperline Lcd "Parametr2?" Lowerline Lcd Parametr2 ; "sek" Waitms 500 Menu_poz = 2 Reset Wyswietlaj Do Debounce Pind.1 , 0 , Mniej_par2 , Sub Debounce Pind.0 , 0 , Wiecej_par2 , Sub If Wyswietlaj = 1 Then Cls Lcd "Parametr2?" Lowerline Lcd Parametr2 ; "sek" End If Reset Wyswietlaj Loop Until Par2_set = 1 Cls Lcd " Odpalamy?" Lowerline Lcd " ENTER-START" Menu_poz = 3 Do Debounce Pind.0 , 0 , Wstrzymanie , Sub Debounce Pind.1 , 0 , Wstrzymanie , Sub If Wstrzymano = 1 Then Goto Menu_startowe End If Loop Until Praca = 1 Cls Lcd "praca" Lowerline Lcd "Par1=" ; Parametr1 ; " Par2=" ; Parametr2 Do Loop End Wiecej_par1: Parametr1 = Parametr1 + 10 Set Wyswietlaj Return Mniej_par1: Parametr1 = Parametr1 - 10 Set Wyswietlaj Return Mniej_par2: Parametr2 = Parametr2 - 10 Set Wyswietlaj Return Wiecej_par2: Parametr2 = Parametr2 + 10 Set Wyswietlaj Return Wstrzymanie: Wstrzymano = 1 Return Zatwierdzone: Disable Int0 Waitms 30 If Menu_poz = 1 Then Par1_set = 1 End If If Menu_poz = 2 Then Par2_set = 1 End If If Menu_poz = 3 Then Praca = 1 End If Enable Int0 Return
Pozdrawiam,
dzięki za aktywny udział

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 13 gości