logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AVRPascal - Darmowy edytor kodu w Pascalu dla mikrokontrolerów AVR

ackarwow 08 Wrz 2024 10:16 1809 42
  • Pomocny post
    #1 21218978
    ackarwow
    Poziom 5  
    Dzień dobry

    Od lat programuję w różnych odmianach Pascala, przede wszystkim na potrzeby aplikacji desktopowych. Od czasu, kiedy zainteresowałem się mikrokontrolerami AVR, szukałem dobrego darmowego kompilatora i edytora dla tego języka, obsługującego AVR-y. Okazało się, że znany mi kompilator Free Pascal oraz Lazarus jako środowisko to potrafią, ale praca z nimi, jak dla mnie, nie jest zbyt wygodna.

    Dlatego napisałem własny edytor, który nazwałem AVRPascal, który załączam. AVRPascal wykorzystuje kompilator Free Pascal do tworzenia pliku wynikowego oraz AVRdude, który umożliwia zapisanie kodu w pamięci mikrokontrolera z użyciem programatora USBasp lub płytki Arduino (AVRPascal obsługuje kilka typów płytek).

    Zrzut ekranu edytora AVRPascal z kodem w języku Pascal i oknem opcji kompilatora. Interfejs edytora AVRPascal z błędem kompilacji w kodzie języka Pascal. Okno dialogowe ustawień fuse-bitów mikrokontrolera w AVRPascal Zrzut ekranu z edytora AVRPascal z oknem podpowiedzi do funkcji Zrzut ekranu przedstawiający edytor AVRPascal z podświetloną składnią i funkcją podpowiedzi. Zrzut ekranu z oknem informacyjnym dotyczącym mikrokontrolera ATMega328P.

    AVRPascal posiada:
    • podświetlaną składnię, w przypadku błędów kompilacji wskazuje linię kodu, w której wystąpił błąd
    • podpowiedzi parametrów funkcji i procedur oraz pól typów rekordowych i metod typów klasowych
    • możliwość pracy z wieloma plikami w zakładkach
    • możliwość konfiguracji fuse-bitów mikrokontrolera

    Do edytora dołączyłem bibliotekę UnoLib, będącą tłumaczeniem na język Pascal części standardowej biblioteki Arduino dla Arduino Uno (ATMega328p) oraz kilka przykładowych projektów.

    AVRPascal jest absolutnie darmowy (freeware). Mam nadzieję, że przypadnie Szanownym Użytkownikom Forum do gustu, będę wdzięczny za wszelkie uwagi (szczególnie krytyczne), które pozwolą na jego ulepszenie. Program staram się rozwijać na bieżąco, nowe wersje pod Windows, Linux i MacOS umieszczam na mojej stronie internetowej http://akarwowski.pl/index.php?page=elektronika&lang=pl. W załącznikach instrukcja oraz spakowany instalator pod Windows (64-bit, zajmuje prawie 20 mb, więc podzieliłem go na dwie części).
  • Pomocny post
    #2 21219116
    JacekCz
    Poziom 42  
    To komponent Scintilla ?
  • #3 21219125
    ackarwow
    Poziom 5  
    JacekCz napisał:
    To komponent Scintilla ?


    Nie, komponent do edycji tekstu to SynEdit. AVRPascal jest napisany w Lazarusie/Free Pascalu.
  • Pomocny post
    #4 21219203
    Chivo
    Poziom 26  
    Cześć,

    Gratuluję udanego i ciekawego projektu. Pewnie spędziłeś nad nim sporo czasu. Boję się, że mało osób używa języka Pascal do programowania układów AVR, skoro teraz króluje język C.

    Czy możesz udostępnić przykładowy kod typu blink led dla Atmega8 lub innego procesora, żeby przypomnieć sobie ten język programowania?

    Pozdrawiam, Rafał -:)
  • #5 21219252
    ackarwow
    Poziom 5  
    Chivo napisał:
    Cześć,

    Gratuluję udanego i ciekawego projektu. Pewnie spędziłeś nad nim sporo czasu. Boję się, że mało osób używa języka Pascal do programowania układów AVR, skoro teraz króluje język C.

    Czy możesz udostępnić przykładowy kod typu blink led dla Atmega8 lub innego procesora, żeby przypomnieć sobie ten język programowania?

    Pozdrawiam, Rafał -:)


    Dziękuję za komentarz i miłe słowa. Możliwe, że mało osób używa Pascala, bo jak dotąd - o ile mi wiadomo - nie było darmowego, łatwodostępnego kompilatora Pascala dla AVR. Free Pascal zmienił tę sytuację. Przykładowy blink dla ATMega328p/Arduino Uno:

    Kod: Delphi
    Zaloguj się, aby zobaczyć kod


    Kilka przykładów dołączyłem do AVRPascala, jest też blink. Blink z AVRPascala jest nieco inny, bo korzysta z tłumaczenia bibioteki Arduino (UnoLib). Kod powyżej jest wersją "minimalistyczną".

    Pozdrawiam serdecznie, Andrzej.
  • #7 21219603
    ackarwow
    Poziom 5  
    Chivo napisał:
    Tu znalazłem ciekawe biblioteki pod AVR w Pascalu https://github.com/ccrause/fpc-avr


    Dziękuję :-) Znam, korzystam. Z czystym sumieniem mogę polecić, powinny też działać w AVRPascalu.
  • #8 21220637
    Simon79
    Poziom 21  
    Bardzo ciekawy projekt. Gratulacje.
    Czy Kolega poleciłby jakieś tutorial do nauki Pascal'a dla AVR ?. Kiedyś pisałem programy w Bascom a teraz w Arduino, ale z ciekawości chciałbym zobaczyć jak to jest w tym języku. Ze szkoły z Pascala pamiętam tylko BEGIN :) ale to było dawno...
  • Pomocny post
    #9 21220689
    oscil1
    Poziom 20  
    Jak rozwiązałes przerwania?
  • #10 21220709
    ackarwow
    Poziom 5  
    Simon79 napisał:
    Bardzo ciekawy projekt. Gratulacje.
    Czy Kolega poleciłby jakieś tutorial do nauki Pascal'a dla AVR ?. Kiedyś pisałem programy w Bascom a teraz w Arduino, ale z ciekawości chciałbym zobaczyć jak to jest w tym języku. Ze szkoły z Pascala pamiętam tylko BEGIN :) ale to było dawno...


    Dziękuję :-) Przygotowuję krótki tutorial dotyczący języka Pascal oraz specyfiki programowania AVR-ów, postaram się go umieścić na forum dziś (pewnie późnym) wieczorem, jak nie dam rady to jutro. Na szybko proponuję dwa odcinki kursu, jaki niegdyś przygotowałem (http://akarwowski.pl/index.php?page=elektronika&lang=pl)
    PS. W Pascalu dla AVR też można programować Arduino :-)

    Dodano po 4 [minuty]:

    oscil1 napisał:
    Jak rozwiązałes przerwania?


    Będzie o tym w tutorialu.

    Dodano po 6 [godziny] 1 [minuty]:

    Załączam obiecany tutorial (KursAVR_00.pdf) + dwa odcinki kursu, o których wspomniałem.
  • #11 21221256
    Chivo
    Poziom 26  
    Dzięki za kurs. Czy będą kolejne odcinki z obsługą ADC, i2c, bibliotekami czujników itp?
  • #12 21221368
    ackarwow
    Poziom 5  
    Chivo napisał:
    Dzięki za kurs. Czy będą kolejne odcinki z obsługą ADC, I2C, bibliotekami czujników itp?


    W dalszej perspektywie - tak. W bliższym czasie - myślałem o opisaniu obsługi wyświetlacza 7-segmentowego na AVR. Kłopot w tym, że jeśli nie ma danej biblioteki tutaj https://github.com/ccrause/fpc-avr, to muszę ją po prostu napisać... Ale jeśli jest zainteresowanie na Forum, to mam większą motywację :)
  • #13 21221522
    Chivo
    Poziom 26  
    Jak w AVRPascalu dodaje się bibliteki np: do obsługi ADC bo w języku C jest instrukcja #include?
  • #14 21221527
    oscil1
    Poziom 20  
    ackarwow napisał:
    Ale jeśli jest zainteresowanie na Forum, to mam większą motywację

    Podziwiam zapał.
  • #15 21221543
    ackarwow
    Poziom 5  
    Chivo napisał:
    Jak w AVRPascalu dodaje się bibliteki np: do obsługi ADC bo w języku C jest instrukcja #include?


    Dziękuję za to pytanie, zapomniałem dodać informację na ten temat w tutorialu. Biblioteki ("unity") załącza się dodając sekcję uses i wymieniając po kolei dołączane pliki. Pliki w ten sposób dołączane muszą się zaczynać od słowa kluczowego unit oraz muszą mieć odpowiednią strukturę (sekcje interface i implementation). W sekcji interface znajdują się deklaracje (prototypy) funkcji i procedur (bez bloku instrukcji), w sekcji implementation - ich kod, tj procedury/funkcje wraz z blokiem begin - end.

    Ogólnie - jak się zbierze trochę poprawek to poprawię/uzupełnię teksty kursu na stronie internetowej (nie będę spamował załącznikami tutaj) i dam znać na Forum.
  • #16 21221602
    Chivo
    Poziom 26  
    Obiecuję w weekend pobawić się programowaniem Attiny13 w AVRPascal :-)

    Dodano po 2 [godziny] 45 [minuty]:

    Napisałem program blink na attiny13 z pliku pdf ale nie udało się go skompilować. Wyświetla błąd expected unit but is program.
  • #17 21221846
    ackarwow
    Poziom 5  
    Chivo napisał:
    Obiecuję w weekend pobawić się programowaniem Attiny13 w AVRPascal :-)

    Dodano po 2 [godziny] 45 [minuty]:

    Napisałem program blink na attiny13 z pliku pdf, ale nie udało się go skompilować. Wyświetla błąd expected unit but is program.


    Z którego kursu? To chyba kolejne niedociągnięcie z mojej strony, powinienem był dołączyć pliki ze źródłami do kursu...
  • #18 21221862
    Chivo
    Poziom 26  
    Z Twojego kursu cześć 1.
  • #19 21221945
    ackarwow
    Poziom 5  
    Chivo napisał:
    Z Twojego kursu część 1.


    Kod przykładu:

    Kod: Delphi
    Zaloguj się, aby zobaczyć kod


    Program mi się bez problemu kompilował jak pisałem kurs. Wtedy AVRPascal używał kompilatora FPC 3.2.2. Teraz przeszedłem na 3.3.1 i nie sprawdzałem przykładów z kursu. No i ... jest problem. Nie da się skompilować przykładu (FPC raportuje przekroczenie rozmiaru sekcji .data i .text). Jeszcze nie wiem co jest przyczyną, być może plik konfiguracyjny attiny13.pp, błędu kompilatora nie podejrzewam, bo kompiluje np. atmegę328p czy różne odmiany arduino. Poszukam przyczyny.

    Zrzut ekranu programu AVRPascal z błędem kompilacji kodu dla mikrokontrolera ATTiny13.

    Na teraz proponuję Ci odinstalować bieżącą wersję AVRPAscala i zainstalować starszą - 1.10.0.418, w którą korzysta z FPC 3.2.2. i która kompiluje powyższy kod bez problemu.
    Zrzut ekranu z kodem programu
    Załączam pod odpowiedzią.

    ***
    Wygląda na to, że znalazłem przyczynę błędu. W wersji FPC 3.2.2 dla systemów embedded nie było w obsługi wątków, w wersji 3.3.1 już jest, co powoduje wkompilowanie w kod wynikowy kodu inicjalizacyjnego obsługi wątków.

    Porównanie plików systemowych w dwóch wersjach Free Pascal Compiler

    Wydaje mi się, że w przypadku AVR-ów obsługa wątków nie ma sensu. A napewno nie jest potrzebna w odniesieniu do ATTiny13. Po zakomentowaniu tej linijki kodu w pliku avrpascal\rtl\embedded\system.pp przykład z Kursu 01 się poprawnie kompiluje:

    Zrzut ekranu środowiska AVRPascal z przykładowym kodem dla kontrolera ATTiny13

    Różnica w objętości kodu wynikowego między starą, działąjącą wersją a nową z poprawką to 6 bajtów. Myślę, że można ją przeżyć... Więc, aby skompilować przykład w bieżącej wersji AVRPascala możesz ręcznie zakomentować tę linijkę albo podmienić plik na system.pp z załącznika system.zip (pod odpowiedzią) i przebudować źródła RTL (Run->Rebuild RTL Sources). Możesz również poczekać na kolejną wersję AVRPascala, w której na pewno to poprawię :) Załączyłem też przykładowy kod z Kursu 1 (_attiny13_blink1.zip).
  • #21 21224144
    ackarwow
    Poziom 5  
    Chivo napisał:
    Napisałem program blink na attiny13 z pliku pdf, ale nie udało się go skompilować. Wyświetla błąd expected unit but is program.

    Czy już udało się Tobie skompilować kod z kursu 1? Jeśli nie - to podeślij zrzut ekranu (Ctrl PrintScreen)
  • #22 21224226
    Chivo
    Poziom 26  
    Postaram się w weekend ale nie obiecuję. Jakoś ciągnie mnie w stronę prostych PIC zamiast AVR.
  • #23 21225294
    ackarwow
    Poziom 5  
    Opublikowałem nową wersję AVRPascala (2.3) na stronie internetowej http://akarwowski.pl/index.php?page=elektronika&lang=pl

    Zmiany:
    - poprawiono błąd kompilacji kodu dla mikrokontrolerów o pamięci flash poniżej lub równej 1 KB (niektóre mikrokontrolery z rodziny ATTiny, np ATTiny13)
    - dodano możliwość otwierania plików *.pas, *.pp i *.inc metodą "przeciągnij i upuść"
    - poprawiono mechanizm nadawania nazwy nowemu plikowi podczas jego zapisywania
    - poprawiono mechanizm podpowiadania parametrów procedur/funkcji i pól/metod typów rekordowych/klasowych

    Jeśli Koledzy mają już zainstalowaną starszą wersję programu, instalator powinien ję wykryć. Wtedy można wybrać opcję Update i instalator
    podmieni odpowiednie pliki na nowe.

    AVRPascal - Darmowy edytor kodu w Pascalu dla mikrokontrolerów AVR

    Po reinstalacji AVRPascala warto przebudować źródła RTL (Run->Rebuild RTL Sources).
  • #25 21225335
    ackarwow
    Poziom 5  
    Simon79 napisał:
    SUPER, teraz plik _attiny13_blink1 kompiluje się bez problemu :).


    Teraz tylko przygotować układ i wgrać kod do pamięci flash :-)
    Oczywiście za pomocą USBAsp i AVRPascala (Run->Upload)
  • #26 21225337
    Chivo
    Poziom 26  
    Super, potwierdzam u mnie też działa.
  • #28 21228674
    Chivo
    Poziom 26  
    Dzięki. Biorę się za lekturę. W następnych odcinkach przyda się obsługa peryferii (np: ADC) i jak tworzyć własne biblioteki.
  • #29 21228694
    ackarwow
    Poziom 5  
    Chivo napisał:
    Dzięki. Biorę się za lekturę. W następnych odcinkach przyda się obsługa peryferiów (np: ADC) i jak tworzyć własne biblioteki.


    Proszę bardzo, mam nadzieję, że Koledze się przyda :-) Jak tworzyć własne biblioteki to sprawa techniczna, po prostu trzeba podzielić kod na procedury i funkcje i te częściej wykorzystywane (z przeznaczeniem do ponownego użycia w innych programach) przenieść do modułów (plików rozpoczynających się słowem "unit"). Przykład podałem w KursAVR_00.pdf, str. 5. Jest tam moduł o nazwie TestUnit zawierający banalną funkcję Sum, którą można wykorzystywać w innych programach. Na początku pisząc banalne funkcje, później już nie tak banalne ;-)

    Jeśli chodzi o kolejny odcinek kursu - myślałem o opisaniu obsługi wyświetlacza 7-segmentowego. Mam nadzieję, że uda mi się to zrobić w rozsądnym czasie, bo równolegle przygotowuję kolejne zmiany i ulepszenia w AVRPascala...
  • #30 21228703
    Chivo
    Poziom 26  
    Ok. Po obsłudze wyświetlacza 7 segmentowego można zrobić odcinek o obsłudze ADC bo często używa się go w projekcie

Podsumowanie tematu

AVRPascal to darmowy edytor kodu w Pascalu stworzony z myślą o programowaniu mikrokontrolerów AVR, wykorzystujący kompilator Free Pascal oraz AVRdude do zapisu kodu. Użytkownicy podkreślają, że edytor jest bardziej przyjazny w użyciu niż inne dostępne narzędzia, takie jak Lazarus. W dyskusji poruszono również przykłady kodu, w tym programy do migania diod LED dla różnych modeli mikrokontrolerów, oraz zaproponowano tutoriale dotyczące programowania w Pascalu dla AVR. Użytkownicy dzielili się doświadczeniami związanymi z instalacją, aktualizacjami oraz problemami z kompilacją, a także omawiali nowe funkcjonalności w kolejnych wersjach AVRPascala, takie jak poprawki błędów i nowe schematy kolorystyczne.
Podsumowanie wygenerowane przez model językowy.
REKLAMA