Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

błąd po zweryfikowaniu kodu w środowisku arduino

elektronik.b 15 Oct 2022 10:53 786 44
Altium Designer Computer Controls
  • #31
    elektronik.b
    Level 3  
    Kurde niestety nic mi nie idzie! Czy ktoś może mi napisać jak to wszystko się robi krok po kroku co najpierw a co potem jak zupełnie zielonemu z zrzutami ekranu?
    Przestawiłem low fuse byte na E4 tak jak napisał @e marcus w poście nr. #28 zapisałem do avr, później po wyeksportowaniu z arduino do pliku hex w folderze tam gdzie mam szkic pojawił mi się taki oto nowy plik (którego wcześniej nie miałem): sketch_oct06a.ino.with_bootloader_atmega16_8000000L też w formacie hex no i oczywiście ten pierwszy co zawsze miałem: sketch_oct06a.ino_atmega16_8000000L.hex
    Tylko nie wiem która mam pierwszy wgrać ten z nazwą bootloarder czy ten pierwszy czy na odwrót a może któryś z nich?
    A tak wogule do czego służy ta zakładka w avr lab++?:
    błąd po zweryfikowaniu kodu w środowisku arduino
    i ta:
    błąd po zweryfikowaniu kodu w środowisku arduino
    A poza tym teraz bazuje na tej drugiej atmedze zupełnie nowej do której nie podłączałem te 7,5V także procesor jest ok.
    A z tymi sterownikami zaraz podziałam.
  • Altium Designer Computer Controls
  • #32
    kaczakat
    Level 34  
    Sprawdziłem ten program, podłączyłem LCD do Atmegi, działa OK. Dodatkowo zauważyłem, że LCD jest podłączony do portu B, gdzie są piny programatora USBASP, żeby móc programować trzeba odłączyć B4-B7 od LCD - kolejny konflikt, a cały port D jest wolny.
    błąd po zweryfikowaniu kodu w środowisku arduino
    Temperatura pokazuje głupoty, bo nie mam tego czujnika i odczytuje co tam wiatr na A0 przywieje.
    I teraz tutorial jak napisać ten program w Arduino (o który nikt nie prosił).
    Otwierasz przykład z wbudowanej w Arduino biblioteki LiquidCrystal Library - Hello World. Podłączasz kabelki w tryb 4 bitowy, w programie definiujesz gdzie co podłączasz, np. ja wybrałem:
    const int rs = 0, rw=1, en = 2, d4 = 23, d5 = 22, d6 = 21, d7 = 20;
    LiquidCrystal lcd(rs, rw, en, d4, d5, d6, d7); - dodałem sobie pin rw, skoro i tak już miałem tyle kabli na biurku, ale można też go na stałe podłączyć do GND, gdy się nie używa w programie.
    pinout Atmega16/32 jest na stronie core:
    błąd po zweryfikowaniu kodu w środowisku arduino
    Wgrałem program i działa.
    błąd po zweryfikowaniu kodu w środowisku arduino
    To teraz konkretnie ten cały projekt z czujnikiem temperatury, w przykładzie jest pokazane jak wysłać na ekran napis "Hello World". Tak samo trzeba wysłać napis "Temperature", by się napisy nie nakładały na siebie wyczyszczę wcześniej ekran, w drugiej linii wyświetlę temperaturę skopiowaną forumułą z projektu nie wnikając czy jest prawidłowa: (float)(analogRead(0)*4.88)/10, dodałem (float) to nawet po przecinku wartości pokaże, a co, można poszaleć. No i tylko trzeba pamiętać, że numeracja jest od 0, czyli druga linia ma nr 1.
    I cały program wygląda w Arduino tak:
    Code: c
    Log in, to see the code

    Efekt ten sam:
    błąd po zweryfikowaniu kodu w środowisku arduino
    I pewnie ten napisany w C jest szybszy i mniejszy, ale co komuś po ferrari, jak nie opanował jeszcze przemieszczania się w chodziku.
    Nie masz konfliktu z programatorem, możesz go teraz modyfikować ile chcesz i wgrywać, możesz zmieniać taktowanie uC od 1 do 16MHz i z każdym zadziała OK, możesz zmienić piny podając w programie inne i nie musisz nic zmieniać w bibliotece.
  • #33
    elektronik.b
    Level 3  
    A możesz dać schemat jak to jest wszystko połączone do tego kodu?

    Dodano po 1 [godziny] 19 [minuty]:

    Ten Twój cały program i tak nie wgrywa się z arduino. A kompiluje się prawidłowo.
  • Altium Designer Computer Controls
  • #34
    kaczakat
    Level 34  
    Nie mam schematu, to są wszystkie połączenia u mnie: const int rs = 0, rw=1, en = 2, d4 = 23, d5 = 22, d6 = 21, d7 = 20;, 7 kabelków między Atmega i LCD, a Ty możesz sobie podłączyć gdzie chcesz byle nie do SPI (bo będziesz musiał odłączać kable LCD by zaprogramować) i A0, a potem tutaj to wpisać. Lepiej też nie do UART i I2C, bo może wpadniesz na to by go użyć jednak za chwilę. Te podane są "akurat" na tę chwilę, ale nie ma żadnego problemu by je podmienić korzystając z kodu Arduino, z kodem biblioteki C to już jest problem, bo całe 8 pinów jednego portu musi być wykorzystane jednocześnie, albo przeróbka biblioteki, albo użycie innej - też są takie gdzie można na 4bity i różne porty, ale coś za coś.
    Może to rozjaśni jak nie rozumiesz diagramu pinout:
    błąd po zweryfikowaniu kodu w środowisku arduino
    Sam LCD oczywiście musi być podłączony do zasilania, może być to samo co dla Atmegi, nie musisz wtedy pamiętać by był przynajmniej wspólny GND. W Google jest pełno takich schematów, mój jest zgodny np. z tym: https://www.circuitstoday.com/interfacing-lcd-to-arduino
    oczywiście numery tych 7 pinów są jak w pierwszym zdaniu i RW też połączyłem do uC zamiast do GND.
    Pewnie, że nie wgrywa, bo program nie ma żadnego związku z działaniem programatora i jego driverem, ciągle nie napisałeś czy udało się podmienić driver w ZADIG. Ten programator jest słaby, ale tani, prosty i miliony ludzi jakoś go zagania do pracy w Arduino.
  • #35
    elektronik.b
    Level 3  
    Podłączyłem lcd z atmegą tak jak pokazałeś na obrazku i nie działa.
    Zainstalowałem sterowniki libusbK v3.1.0.0 z zadig 2.7 i też nie działa.
    Na razie daje sobie z tym spokój czekam na nowy lcd może to coś da, i ma pytanie czy jak w avr lab++ odczytuje mi atmegę to oznacza że procesor jest sprawny? czy to nie ma znaczenia?

    Dodano po 35 [minuty]:

    Z połączeniu z arduino uno wszystko działa jak należy a z atmegą ni hu...
    błąd po zweryfikowaniu kodu w środowisku arduino
  • #36
    kaczakat
    Level 34  
    To kolejna zaleta programu napisanego na bibliotekach Arduino, o której nie wspomniałem. wystarczy podać piny występujące w 3 różnych uC i ten sam program możesz wgrać do tych 3 różnych uC.
    Jak masz UNO to zrób sobie z niego programator, wgrywasz szkic ArduinoISP, w przykładach do UNO pozycja 11, łączysz pin 10 do RST Atmega32 (sprawdź czy ten masz zdefiniowany do RST, można wybrać inny), reszta 1:1 czyli MOSI, MISO, SCK, wspólny GND i VCC, wszystko odłączone od Atmega32 by nie zakłócało.
    Jest wielce prawdopodobne, że dowiodłeś sprawności LCD tą fotką. Raczej szukałbym problemu z programatorem, USB ASP są kapryśne.

    Zainstaluj sobie MICRO CORE, wiem że to niby głupie, stąd wybierz programator USBASP slow lub normalny.
    Wczoraj wgrywałem kilka razy program do Attiny85 z Arduino, który miał podłączony MISO do pinu nadawczego radia 433MHz, radio sieje na ten pin losowe 0 i 1, program się wgrywał, ale nie działał, nawet zwykłe miganie LED. Ale odczyt z AVR LAB działał raz na 3, ten sam program wgrany z MKAVR calc działał OK. Arduino wgrywało wolniej bo ustawiłem programator USBASP MightyCORE SLOW i zdążył wyłapać jakieś błędy, niby robi jakąś weryfikację, ale ja nie widziałem żadnego ERROR czy coś, wgrał, odczytał, zweryfikował, program nie działa. Miałem zagwozdkę na parę minut co się dzieje. W międzyczasie przestawiłem programator na USBASP, ten główny z Arduino CORE. Może programator być OK, może uC być OK, może kabel być OK, a jest jakieś zakłócenie i nie zagra, te same elementy podłączone za chwile w innej konfiguracji, uC do innego programatora, programator do innego uC, będą działać OK. Teraz znowu przestawiłem na ten USBASP SLOW MIGTYCORE i znowu wgrany blink nie działa, chciałem sprawdzić czy na pewno weryfikacja nie sypie błędami. Oczywiście akurat w tym przypadku u mnie nie powinienem mieć radia na pinie MISO, to na pewno nie pomaga.
    No a teraz wybrałem programator z USBASP z MightyCore bez SLOW i też mi blink nie działa. Może tu jednak jest błąd, z Micro core SLOW wgrał bez problemu, z MK AVR też wybrałem kilka prędkości wgrywania i wgrywał OK pomimo nieodłączenia kabla od radia. Każdy CORE ma swoją wersję programu do wgrywania AVRDUDE, może ta z MightyCore jest lewa. W sumie nie musi mieć tu w swoich plikach konfiguracyjnych Attiny85, ale ma bo wgrywa, tylko że źle. Normalnie jakaś czarna magia.
  • #37
    elektronik.b
    Level 3  
    Mam w planie jeszcze może zrobić ten termometr: https://circuitdigest.com/microcontroller-pro...-temperature-sensor-based-digital-thermometer
    Tylko że tam jest użyta atmega32 a ona sugerując się z tego diagramu pinout co podałeś ma taki sam układ wyprowadzeń co atmega16 więc 16 mogę użyć chyba spokojnie do tego w/w. projektu.
    I pisze tam że jest potrzebny programator avr-isp bo jak myślisz ze problem może tkwić w w tym usbasp.
    Program jest do tego termometru i ładnie się kompiluje bez żadnych problemów, wiem bo już sprawdzałem.
    Także lcd nie będe kupował nowego bo mam obydwa sprawne, tylko chyba zakupie sobie tą atmegę32.
  • #38
    kaczakat
    Level 34  
    Wszystkie te programatory to są AVR ISP, bo są do AVR i programują jako ISP. Nie ma znaczenia czy program wgrasz bootloaderem, programatorem i którym z tych załączonych do MICRO CORE, MightyCORE czy MINICORE. Ważne by miał prawidłowy firmware, obsługujący go AVR DUDE i dobre drivery.
    Tam gdzie dałem linka do schematu jak podłączyć LCD też masz projekt w Arduino termometru LM35 na Arduino i LCD, tylko na UNO, w Arduino to nie ma znaczenia jak umiesz napisać nazwy pinów w odpowiednie miejsca inicjacji LCD.
    A Ty znalazłeś kolejny napisany w C, lubisz widzę ambitnie, choć pod górkę, do pisania w C są lepsze programy niż Arduino IDE. Z tego wątku będzie mogła powstać jakaś książka, nie wiem tylko czy edukacyjna.
    Wg mnie nie warto inwestować w 16 ani 32, to takie same uC, różnią się tylko ilością pamięci, oba były stare jak ja jeszcze byłem młody, dawno temu. Tutoriale do nich znajdziesz nawet w drukowanych magazynach dostępnych po bibliotekach. W cenie 1 atmegi32 masz dwie kompletne płytki z WIFI ESP8266 Wemos mini, po cenach sklepowych, pomijając jakieś używki o niewiadomej historii, mają mało pinów do LCD, ale są też te LCD z adapterem I2C, 2 piny się tylko podłącza do Atmegi, czy do ESP.
    Nauczyłeś programator działać w Arduino?
  • #39
    elektronik.b
    Level 3  
    No wreszcie się udało! Termometr działa. Udało mi się wgrać ten kod programu z tego linku co podałem powyżej.
    Tylko w arduino z menu Narzędzia trzeba było wybrać Płytkę: Atmega16, Clock: Internal 1MHz, Programator: USBasp slow (MightyCore) i oczywiście z menu Szkic: Wgraj używając programatora i tyle no i działa. Ale bez wgrania bootloadera.
    Bo jeszcze wczoraj próbowałem tak: wgrywałem kod a później bootloarder (zresztą bootloarder też udało mi się wgrać) i nie działało a dzisiaj wgrałem sam szkic i wszystko zadziałało jak należy.
    błąd po zweryfikowaniu kodu w środowisku arduino
    A może wiesz jeszcze jak zmienić program żeby w pierwszej linijce lcd wyświetlało mi napis "Temperature" a w drugiej "Celcius" i ta ilość stopni? Nie ukrywam że czakam na gotowca.
  • #40
    kaczakat
    Level 34  
    No to wgraj poprzedni kod, robił dokładnie to, przecież sprawdziłem, że kod działa, tylko wgrać go nie umiałeś.
    A jak chcesz zmodyfikować coś w tym użytym, to serio trudno znaleźć w kodzie linię z napisem widocznym na ekranie " send_a_string ("CIRCUIT DIGEST");"?
    Jak w ustawieniach płytki wybrałeś, że masz płytkę z bootloaderem, to kliknięcie w strzałkę do wgrania nie używa programatora tylko szuka bootloadera na wybranym porcie COM, by użyć programatora do wgrania trzeba wybrać opcję z menu. Jak w ustawieniach płytki masz możliwość wybrania opcji "no bootloader" i tak ustawisz, to kliknięcie w strzałkę wgra program używając wskazanego programatora.
  • #41
    elektronik.b
    Level 3  
    No ten poprzedni kod (z pierwszego postu) też udało mi się wgrać (bez żadnych błędów) ale dopiero po podłączeniu atmegi32 i wybraniu tej właśnie płytki i ustawieniu internal 8mhz bo do atmegi16 żadnym sposobem nie idzie wgrać.
    Udało mi się również wgrać także bootloarder. Ale niestety układ nie działa! Moim zdaniem coś jest nie tak na schemacie.
    Z resztą pisałeś wcześniej że jest jakiś konflikt na schemacie.
    Ale nie napisałeś mi jeszcze czy kolejność wgrywania szkicu i botlooadera mam jakieś znaczenie czy nie.
  • #42
    kaczakat
    Level 34  
    Masz 10000 szans by sprawdzić odpowiednią kolejność wgrywania, tyle razy można wgrać coś a Atmegi, z tego co ja zauważyłem wgrywając bootloader w Arduino, nawet jeśli to jest ustawienie fusebite w opcji no bootloaer to i tak program uC jest kasowany. Jak wgrasz bootloader z sukcesem, to wyłącza Jtag na porcie C, niektóre piny mogą bez tego nie działać jako IO, samo wgrywanie .
    Ustawienie fuse w MK AVR calc nie kasuje uc, można zmienić fuse i zachowanie już wgranego programu.
    Jak wgrywanie Ci działa i wgrałeś bootloader, uC jest przestawiony na 8MHz to i Jtag jest wyłączony, a Ty masz coś nie halo z kablami na płytce.
  • #43
    elektronik.b
    Level 3  
    Dobra. Dam sobie spokój z tym termometrem. Wystarczy mi ten który zrobiłem wcześniej.
  • #44
    emarcus
    Level 38  
    elektronik.b wrote:
    Dobra. Dam sobie spokój z tym termometrem. Wystarczy mi ten który zrobiłem wcześniej.

    I co nim będziesz mierzył?
    Temperaturę grzejnika CO(?) , - bo z pewnością nie temperaturę otoczenia na zewnątrz budynku, która w niedługim czasie może 'stać się' ujema (!) , a sporządzony termometr w tym projekcie mierzy zakres temperatur tylko dodatnich.
    Dla temperatur poniżej zera °C układ potrzebowałby pewnego rozszerzenia.
    Ponadto, we wcześniejszych postach nadmieniłeś że posiadasz płytkę testową z czasów kursu ”Oślej Łączki’ czyli BASIC-Bascom, zakupioną łacznie z programatorem .
    Dużo łatwiej i prościej i być może bardziej zrozumiały dla ciebie (?) byłby kod utworzony w tym środowisku z własnym udziałem.
    Dla tak ‘zaawansowanego’ zastosowania z powodzeniem wystarczył by dedykowany na tej płytce procesor Attiny 2313/ (2313) i ten wyświetlacz (LCD16x2), który posiadasz.
    Trochę lepsza i nieco bardziej komplikowaną metodą byłoby zastosowanie sensora DS18B20, albo z ‘wyższej półki’ DHT11/21/22 etc., czy też BMP280/BME280 mierzące nie tylko temperaturę, ale także wilgotność względną (RH) i opcjonalnie ciśnienie powietrza. Nowocześniejszą i kosztowniejszą dodatkową opcją byłoby zastosowanie wyświetlaczy typu OLED.
    Metoda, którą wybrałeś „skakanie od jednego gotowego programu do drugiego” tworzonych w różnych środowiskach/platformach, bez jego zrozumienia i dołączania często dedykowanych bibliotek, nie jest najlepszą drogą do osiągnięcia sukcesu, nawet przy usilnej pomocy tej grupy.
    Dla porównania, posługując się analogią kuchenną:
    -mając troche mięsa drobiowego, troche łopatki wieprzowej i przepuszczjąc to przez maszyne do mielenia mięsa - nie zrobisz z tego klasycznego i smacznego 'Filet Mignon' (!!!)

    e marcus
  • #45
    elektronik.b
    Level 3  
    Będę mierzył temperaturę nie na zewnątrz tylko w domu. A termometr na attiny2313 i z czujnikiem ds18b20 już zbudowałem tylko że na wyświetlaczu 7-segmentowym.