Koleżankom i Kolegom Radioamatorom, Krótkofalowcom,
Konstruktorom i Waszym Rodzinom – w tych trudnych czasach –
Zdrowych, Spokojnych i Pogodnych Świąt Bożego Narodzenia oraz
Szczęśliwego Nowego Roku

Życzy Zespół Home Made


Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Bascom AVR
SP5FCS Offline
Adam
*****

Liczba postów: 1,072
Dołączył: 02-02-2009
Post: #1
Bascom AVR
Nie programuję w Bascomie ale zaciekawiły mnie rekomendacje Kolegów stosujących z powodzeniem ten język. Chętnie rzucę okiem na kod wygenerowany przez Bascoma i podzielę się opinią jak to wygląda od strony assemblera.
Rafał jeśli to nie problem to poproszę o przykładowy fragment kodu realizujący opisywaną przez Ciebie funkcję ( RX copy to vTX) obsługi wirtualnego portu oraz plik hex np dla ATmega8.

Otrzymałem od Rafała SQ4AVS fragment programu w Bascomie wykorzystujący wirtualny port szeregowy oraz stosowny plik hex. Aby poznać mechanizm rozwijania poszczególnych instrukcji Bacoma na kod maszynowy procesorów AVR dokonałem disassemlacji pliku hex uzyskując program w postaci mnemoników assemlera.
Kod generowany przez Bascoma dla większości prostych instrukcji wygląda dość przyzwoicie, wszystkie zmienne umieszczane są w pamięci SRAM.
Utworzenie wirtualnego kanału szeregowego na procesorze jest dość proste i działa poprawnie przy umiarkowanych szybkościach i długościach ramek.
W analizowanym przykładzie wszystkie instrukcje do obsługi kanałów szeregowych (open, print, inkey, input) realizowane były poprzez procedury programowe bez użycia mechanizmu przerwań. Taki sposób obsługi transmisji w zależności od jej intensywności może powodować gubienie znaków podczas odbioru. Jeśli jakiś fragment programu pochłonie więcej czasu niż dwa znaki, jeden zostanie zgubiony. Rozwiązaniem problemu jest wykorzystanie przerwań do odbioru i buforowanie znaków. Nadawanie możemy realizować programowo poprzez port wirtualny.

73 Adam
15-08-2010 22:43
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ4AVS Offline
Rafał
*****

Liczba postów: 1,401
Dołączył: 29-01-2010
Post: #2
RE: Bascom
Zrobioną praktycznie już mam wersję na przerywaniach nieco jednak dłuższą, w starszej wersji przesyłałem każdorazowo 8 bajtów w międzyczasie wykonując dodawanie, sprawdzanie czy pewne klawisze sterujące w komputerze zostały naciśnięte (inkey), nie zaobserwowałem nigdy gubienia znaków. Taki łazik z telemetrią. Kiedyś słyszałem od Kolegi piszącego w asamblerze, że deasamlacja kodu z heks-a daje "pokrętny kod", i stąd nie wiedziałem, że jakikoliwiek jest sens jest to robić -jak widać myliłem się. Dzięki Adamie za wykonanie ciekawego porównania.
20-08-2010 8:31
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5FCS Offline
Adam
*****

Liczba postów: 1,072
Dołączył: 02-02-2009
Post: #3
RE: Bascom
Disassembler
Pisząc oprogramowanie w językach wysokopoziomowych (Bascom, C, Pascal) warto rzucić okiem na kod generowany przez kompilator. Jeśli środowisko kompilatora nie generuje pliku z kodem assemblera lub autor projektu udostępnia tylko pliki hex-a możemy zrobić to sami zewnętrznym disassemblerem. Wadą tej metody jest brak powiązania z instrukcjami wysokopoziomowymi, brak komentarzy, brak nazw zmiennych, instrukcji, funkcji, procedur tablic itd. , jednym słowem sam na sam z "gołym kodem".
Proste disassemblery nie radzą sobie z danymi umieszczanymi w kodzie programu (stałe, tablice, łańcuchy), zamieniając je bez sensu na stosowny kod programu dlatego musimy robić to rozważnie. Jeśli znamy dobrze procesor, posiadamy schemat urządzenia oraz pewne doświadczenie w assemblerze rozpracowanie takiego kodu to tylko kwestia czasu. Jako przykład kilka prostych instrukcji Bascoma oraz odpowiedni kod assemblera.

Kod:
;If Pind.2 = 0 Then
          sbic   PIND, 2      ; 008C 9982
          rjmp   avr00AF      ; 008D C021
;Waitms 25
          ldi    r24, 0x19    ; 008E E189
          ldi    r25, 0x00    ; 008F E090
          rcall  avr0153      ; 0090 D0C2
;If Pind.2 = 0 Then
          sbic   PIND, 2      ; 0091 9982
          rjmp   avr00AF      ; 0092 C01C
;Portd.3 = 0  
          cbi    PORTD, 3     ; 0093 9893
;Wait 3  
          ldi    ZL, 0x03     ; 0094 E0E3
          ldi    ZH, 0x00     ; 0095 E0F0
          rcall  avr011B      ; 0096 D084

Wirtualny kanał szeregowy
Rafał, jeśli strumień danych do odbioru jest mały a stopień obciążenie procesora niewielki to może pracować to poprawnie nawet bez przerwań. W prostych aplikacjach możemy często sprawdzać czy jest nowy znak w buforze aby go odczytać. Pamiętajmy jednak, że dane docierają do procesora asynchronicznie w stosunku do jego algorytmu pracy. Jeśli trafimy na moment w którym procesor jest zajęty dłużej obsługą innego zadania to tylko przerwanie daje mam gwarancję pełnej obsługi odbioru. System przerwań w mikroprocesorach to jedno z najmocniejszych narzędzi budowania aplikacji dlatego warto go lepiej poznać.

73 Adam
20-08-2010 14:24
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ4AVS Offline
Rafał
*****

Liczba postów: 1,401
Dołączył: 29-01-2010
Post: #4
RE: Bascom
Adamie oczywiście masz racje z przerywaniami, dodając jeszcze odczyt położenia gps i wirtualne comy musiałem posłużyć się przerywaniami -nie było już wyjścia. Układ obsługuje w sumie 2 jednokierunkowe rs (GPS i luksomierz) i pełny dwukierunkowy rs (sterowanie i przekazywanie informacji zwrotnej o położeniu, natężeniu oświetlenia, temperaturze, wilgotności i ciśnieniu -taki łazik "ala marsjański", choć na marsie gps chyba nie działa ;-). Tak jak piszesz gubił dane szczególnie z odczytu położenia z ramki nmea bez przerywań. ciągu ostatnich paru dni miałem więcej czasu to pobawiłem się. Ogólnie lubię język wysokiego poziomu za łatwość pisania, a, że kompilator kosztuje,oscyloskop też kosztuje a większa pamięć w procesorze no cóż parę złoty drożej -dla mnie warto.
20-08-2010 20:12
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ6OXK Offline
Paweł
****

Liczba postów: 317
Dołączył: 23-06-2010
Post: #5
RE: Bascom
(20-08-2010 14:24)sp5fcs napisał(a):  Disassembler
Pisząc oprogramowanie w językach wysokopoziomowych (Bascom, C, Pascal)

Hmm Adamie, to są dostępne kompilatory na '51 (AVR) z Pascal-a, nie spotkałem jeszcze żadnego. Możesz coś podrzucić?
21-08-2010 12:42
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #6
RE: Bascom
Embedded Pascal może to?

btw. Pierwsza łączność via MikroPrzemiennik przeprowadzona, znaczy się działa. Smile

...przede wszystkim nie zakłócać...
21-08-2010 12:48
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
TG50 Offline
Józef
***

Liczba postów: 178
Dołączył: 20-11-2009
Post: #7
RE: Bascom
Paweł, zanim zadasz pytanie na forum zapytaj GOOGLE co mają na ten temat.
Turbo51 - darmowy kompilator Pascala dla rodziny 8051, zgodny z Tubo Pascalem 7 firmy Borland.
mikroPascal for AVR - komercyjny kompilator pacala dla AVR

Ryszard, gratuluję pozytywnych testów sterownika, pomyśl nad ostatecznym schematem to druk narysujemy wspólnymi siłami Kolegów z forum.
21-08-2010 13:21
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5SAI Offline
Andrzej
***

Liczba postów: 110
Dołączył: 24-03-2010
Post: #8
RE: Bascom AVR
Ja Ryśku, że tak sobie pozwolę napisać z duchem krótkofalarskim, podtrzymuje chęć pomocy we wszystkich wspólnych przedsięwzięciach, szczególnie w Warszawie moim rodzinnym mieście. A teraz zmykam poczytać w necie o tym „Twoim” EchoLinku, przecież byłem, jestem nadal sp5sai.ampr.org i jak pisał znany wszystkim poeta
Adam Asnyk napisał(a):Trzeba z żywymi naprzód iść,
Po życie sięgać nowe,
A nie w uwiędłych laurów liść
Z uporem stroić głowę

Wy nie cofniecie życia fal!
Nic skargi nie pomogą:
Bezsilne gniewy, próżny żal!
Świat pójdzie swoją drogą!
I tym poetyckim akcentem

Pozdrawiam Andrzej SP5SAi
( SP5 Stanisław Adam Irena )
23-08-2010 16:11
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Klim_on Offline


Liczba postów: 4
Dołączył: 27-08-2010
Post: #9
RE: Bascom AVR
Witam kolegów,
korzystam z zaproszenia i informuję, że opublikowałem już dziesiątki praktycznych programów, którymi dzielę się bez ograniczeń.
Pokazuję też kompilator, opisuję jak postępować z fusebitami, pokazuję fotki i schematy.
Zapraszam na moją stronę: http://www.henwyd.republika.pl
SP3JCG
Witaj Rysiek,
cieszę się, że wybrałeś Bascom, trochę lekceważony przez innych programistów. Zapewniam Cię, że w tym programie napiszesz wszyskie pomysły. Bądź wytrwały. Zaglądnij na moją stronę, zobaczysz ile urządzeń zbudowałem w oparciu o Bascom.
http://www.henwyd.republika.pl
Pozdrawiam, SP3JCG.
(Ten post był ostatnio modyfikowany: 27-08-2010 20:45 przez Klim_on.)
27-08-2010 20:35
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Klim_on Offline


Liczba postów: 4
Dołączył: 27-08-2010
Post: #10
RE: Bascom AVR
Wszystkie programy są moimi własnymi, więc można z nich korzystać bez ograniczeń.
SP3JCG
28-08-2010 17:54
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości