Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 5 kwi 2025, o 14:59


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 24 sty 2024, o 21:50 
    Offline
    Nowy

    Dołączył(a): 24 sty 2024
    Posty: 2
    Pomógł: 0

    Cześć,

    Uczę się obecnie programować Atmega4809. Kawałek programu napisałem i działa według założeń, lecz utknąłem przy pisaniu biblioteki do obsługi I2C.
    Szukałem w sieci czegoś na czym można się oprzeć i znalazłem biblioteki na poniższej stronie z pierwszego posta.
    avrfreaks.net/s/topic/a5C3l000000UZlVEAW/t151275
    Próbowałem modyfikować rejestry w tej bibliotece według dostępnego manuala i dokumentacji od Microchipa,
    Rejestrów jest tak dużo że nie wiem co ma być dokładnie ustawione.
    Pomyślałem o Tym forum z myślą o naprowadzeniu i wskazaniu czym powinienem się zainteresować.

    Co do HW to Atmega4809 obecnie jest taktowana z wewnętrznego generatora na 10 MHz, zasilanie to 3V3 więc to najwyższe taktowanie.
    Nie wiem czy nie zasilić z 5V i zwiększyć taktowanie do 20 MHz, ale wtedy musiał bym zastosować konwerter poziomów napięć dla OLED.

    Potrzebuję zastosować w miarę dokładny ADC najlepiej z pomiarem różnicowym.
    Postawiłem więc na ADS1115 podpięty jest do magistrali TWI za pomocą pinów PA3 i PA2

    Co do biblioteki to coś działa w wersji oryginalnej. Jednak jak wysyłam ramkę TWI_Start(0x48); to tak naprawdę jest wysyłana 0x24.

    A jak wysyłam ramkę TWI_Write(0x01); to wartość jest wysyłana poprawnie, ale jak chcę nadać kolejną TWI_Write(0xC1);
    to muszę między nimi dać kilkadziesiąt do set opóźnienia w mikrosekundach gdyż wysyła się tylko jedna, a pozostałe już nie są wysyłane.

    Dzięki za rady z góry. W razie czego dostarczę kod i odczyty z analizatora.

    Pozdrawiam Smykowskii



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 sty 2024, o 23:03 
    Offline
    Użytkownik

    Dołączył(a): 09 lip 2019
    Posty: 116
    Pomógł: 11

    Tej biblioteki o której piszesz niestety nie znam, ale na serio może warto po prostu zaopatrzyć się atnelową bibliotekę MK I2C jeśli chcesz nastawić się na szybki rezultat.
    https://sklep.atnel.pl/pl/p/0581_0582-M ... teka-C/244

    Ja pisałem swoją własną obsługę I2C na przerwaniach (akurat mi na tym zależało), ale też poważnie się zakałapućkałem z tym I2C i gdybym nie miał Mirkowej biblioteki jako referencji, to bym wszystkie włosy chyba z głowy wyrwał.

    Z rzeczy na których utknąłem w którymś momencie mogę wymienić:
    - niepoprawne oczekiwanie na zakończenie operacji TWI (jeśli nie przerwanie, to trzeba czekać na bit TWINT w rejestrze TWCR)
    - odpowiednie ustawianie ACK/NACK przy transmisji - błąd potrafi "zawiesić magistralę" w subtelnych okolicznościach - np. kiedy ostatni bit transmisji jest zerem.
    - na implementację I2C trochę trzeba patrzyć jak na graf operacji, albo maszynę stanów - zauważyłem, że przejście z poprzedniego stanu do następnego musi być zrobione dokładnie tak jak dokumentacji procka opisane - jak zrobi się coś inaczej, to zaczynają się fajerwerki ;-)

    podrzucam mój własny przykład implementacji TWI (w trybie Slave) - w dość specyficznym wykorzystaniu - niezbyt generyczne - ale być może się przyda jako referencja, choć z perspektywy czasu nie wydaje mi się ten kod zbyt czytelny - mimo, że sam go pisałem ;-)
    https://github.com/k-moskwa/kmSigGen/bl ... TWISlave.c



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 sty 2024, o 23:33 
    Offline
    Nowy

    Dołączył(a): 24 sty 2024
    Posty: 2
    Pomógł: 0

    Myślałem o zakupie tej biblioteki ale z tego co wiem są inne rejestry.
    W końcu to jest dużo nowszy kontroler niż przykładowo Atmega32.
    Atmega4809 jest wyprodukowana przez Microchip, a nie Atmel.

    Pozdrawiam Smykowskii



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 sty 2024, o 07:03 
    Offline
    Użytkownik

    Dołączył(a): 09 lip 2019
    Posty: 116
    Pomógł: 11

    Smykowskii napisał(a):
    Myślałem o zakupie tej biblioteki ale z tego co wiem są inne rejestry.
    W końcu to jest dużo nowszy kontroler niż przykładowo Atmega32.
    Atmega4809 jest wyprodukowana przez Microchip, a nie Atmel.

    Pozdrawiam Smykowskii

    W sumie racja, nie zwróciłem uwagi, że to nowszy procek.
    Ale może warto rozpylać temat na starszym i z działającą biblioteką, a potem sportować na nowszy.
    U samych podstaw filozofia działania nie powinna aż tak bardzo się różnić :-)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 sty 2024, o 22:18 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    A czy ten wątek rozważałeś?
    https://www.avrfreaks.net/s/topic/a5C3l ... AG/t151595



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 sty 2024, o 11:43 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    Alternatywą do wyżej wymienionej gotowej dla atmega4809 biblioteki na https://start.atmel.com/
    która jak się okazuje może stwarzać trudności jest ewentualnie biblioteka dla TWI z attiny817. Rejestry i funkcjonalność wydają się być niemal identyczne (atmega4809 ma tylko jeden rejestr więcej, który chyba jest używany bardzo sporadycznie).
    https://ww1.microchip.com/downloads/en/ ... 02543C.pdf
    Przykład jest działający, pytanie tylko na ile otwarty jest w tym przykładzie kod do prawidłowego działania TWI z czujnikiem temperatury.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 sty 2024, o 19:43 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    Jeśli na I2C ma być tylko jeden slave i można zrezygnować z I2C na przerwaniach, to jest fajny tutorial dla Attiny817 z wyjaśnieniem i kodami I2C:
    https://www.youtube.com/watch?v=ojBST0XEFl8
    Zmiana na ATmega4809 to już kosmetyka.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO