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

Atmega328p-pu,RS232,TWI - Scalenie dwóch programów w jeden.

lbrycht 16 Gru 2013 13:10 1377 5
REKLAMA
  • #1 13066993
    lbrycht
    Poziom 8  
    Witam,

    Posiadam dwa aplikację zaprogramowane na dwóch mikrokontrolerach Atmega 328p-pu:

    1. Pierwsza to obsługa magnetometru na szynie TWI, działająca na zewnętrznym kwarcu 16 MHz, Baudrate:9600, TWI 40kHz

    2. Druga to obsługa żyroskopu na szynie TWI, działająca na wewnętrznym rezonatorze 8MHz Baudrate:14400, TWI 40kHz

    Chciałbym scalić te dwa programy w jeden.

    Od czego należałoby zacząć? Co trzeba zmienić?

    Czy jeżeli kompas działa jako slave i żyro jako slave to razem też mogą być jako slave a wówczas atmega jest masterem?
  • REKLAMA
  • #2 13067222
    mickpr
    Poziom 39  
    Myląco opisałeś ten swój interfejs TWI... TWI to inaczej I2C.
    Masz 2x I2C czy 2x UART?
    A może i jedno i drugie - TWI do urządzenia, a RS232 tylko do podglądu?
    lbrycht napisał:
    Od czego należałoby zacząć?
    Od wyboru odpowiedniego do zastosowań chip-a.
  • REKLAMA
  • #3 13067614
    lbrycht
    Poziom 8  
    Mam 2 czujniki I2C, które osobno działają na każdej z Atmeg. Mam jeden UART, którym wysyłam dane do PC. Chciałbym zmodyfikować kod do tego stopnia abym miał jedną atmegę obsługującą oba czujniki jednocześnie.
  • REKLAMA
  • #4 13067786
    mickpr
    Poziom 39  
    lbrycht napisał:
    Mam 2 czujniki I2C, które osobno działają na każdej z Atmeg. Mam jeden UART, którym wysyłam dane do PC. Chciałbym zmodyfikować kod do tego stopnia abym miał jedną atmegę obsługującą oba czujniki jednocześnie.
    Od razu jaśniej :)
    lbrycht napisał:
    Czy jeżeli kompas działa jako slave i żyro jako slave to razem też mogą być jako slave a wówczas atmega jest masterem?
    Teraz mogę z czystym sumieniem odpowiedzieć "TAK", o ile nie używają tych samych adresów.

    Musisz ustalić sobie jaki jest format informacji, którą otrzymuje PC i wymaganą prędkość wysyłania danych do PC (można zwiększyć ją - stosując inny rezonator kwarcowy).
    Obydwa układy - skoro pracują w trybie "slave" - mogą być podłączone pod jeden interfejs TWI (I2C) - o ile mają różne adresy R/W. Atmega w roli "master'a".

    Atmega328 powinna wystarczyć - choć nie wiem jak duży jest program, ale sądzę - że niezbyt duży - skoro obsługuje tylko odczyt tych dwóch urządzeń.
  • REKLAMA
  • #5 13068771
    lbrycht
    Poziom 8  
    Przykładowo chce pozostać przy 16 MHz, więc kompas pozostanie przy tym kodzie który mam.
    Należałoby zmienić więc Baudrate w pliku żyroskopu? Jakieś rejestry?

    Urządzenia mają inne adresy, więc mogę w pętli najpier odbierać dane z jednego urządzenia a potem z drugiego?
    Wwystarczy jedna inicjalizacja twi ? Konieczne są przerwania przy zmianie odczytu z sensorów.

    Ramkę wysyłaną mam ustaloną:

    Z kompasu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    gdzie pierwsze 3 wartości to dane z kompasu a kolejne 3 to losowe wartości wpisane przeze mnie na potrzebę wysyłania do PC bo tam napisałem aplikację która odbiera dane w postaci ramki sześcioelementowej, 3 dane z kompasu i 3 z żyra ale muszę się przepinać atmegami raz żeby badać magnetometr a raz żyroskop.

    Na żyroskopie więc odpowiednio ustawiłem ramkę:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    gdzie pierwsze 3 wartości to losowe dane odpowiadającym danym z kompasu, a kolejne 3 to już właściwe dane pomiarowe żyroskopu.

    Tak więc efektem całego połączenia chce uzyskać ramkę:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jestem wstanie nawet zlecić komuś scalenie tych dwóch programów. Być może powiecie, że jest to proste, lecz nie chciałbym się już bardzo zagłębiać w tym czasie, ponieważ go nie mam zbyt dużo.
  • #6 13069427
    mickpr
    Poziom 39  
    Prędkość UART jest drugorzędna.
    lbrycht napisał:
    Urządzenia mają inne adresy, więc mogę w pętli najpier odbierać dane z jednego urządzenia a potem z drugiego?
    Tak.
    lbrycht napisał:
    Wwystarczy jedna inicjalizacja twi ?
    Tak.
    lbrycht napisał:
    Konieczne są przerwania przy zmianie odczytu z sensorów.
    Nie.

    Po to urządzenia są "slave", żeby na magistrali I2C (TWI) nie było kolizji. Urządzenia odpowiadają wtedy - kiedy zapyta je "master".
    Master odpytuje w jednej chwili tylko jedno urządzenie i tylko jedno odpowiada.
REKLAMA