Korzystam z mikrokontrolera ATMEGA32HVB, który ma funkcję równoważenia komórek, dzięki której możemy podłączyć 4 baterie szeregowo i używać jednej na raz. Jest to bardzo przydatne do zarządzania energią, więc nie mogę użyć innego mikrokontrolera. Proszę zasugerować kilka metod dodania do niego UART, aby móc łatwo łączyć się z urządzeniami szeregowymi.
microcontroller
uart
użytkownik27475
źródło
źródło
Odpowiedzi:
Jak zauważyli inni, możesz albo dodać dodatkowy sprzęt do swojego systemu, aby zapewnić funkcjonalność UART, albo emulować go w oprogramowaniu. Jeśli masz kontrolę nad ogólnym projektem sprzętu i dodanie innego układu scalonego jest opcją, zdecydowanie rozważę podejście sprzętowe. Z pewnością możesz sprawić, by oprogramowanie UART działało przy użyciu bit-bangingu , ale możesz nie chcieć poświęcać zasobów procesora na generowanie wymaganego czasu.
Na pierwszy rzut oka widać, że twój mikrokontroler ma zarówno SPI, jak i I2C (które Atmel nazywa interfejsem dwuprzewodowym (TWI)). Prawdopodobnie byłyby to najlepsze interfejsy do podłączenia zewnętrznego UART. Wymienione urządzenia są dostępne od wielu producentów. Kilka przykładów:
Exar ( http://www.exar.com/connectivity/uart-and-bridging-solutions/i2c-spi-uarts ) ma do dyspozycji linię 1- i 2-kanałowych urządzeń UART SPI / I2C, obejmujących ~ 1.6- Zakres pracy 3,3 V. Nie korzystałem z żadnej z tych części, ale w przeszłości korzystałem z urządzeń Exar (z równoległymi interfejsami magistrali pamięci) i działały one dobrze.
NXP ( http://ics.nxp.com/products/bridges/i2c.spi.slave.uart.irda.gpio/ ) ma dostępną linię urządzeń SPI / I2C UART / IrDA / GPIO, również w wersjach 1 i 2 - odmiany kanałów w kilku zakresach napięcia. W przeszłości z dużym powodzeniem korzystałem z tych części (szczególnie z SC16IS762).
Maxim ( http://www.maximintegrated.com/datasheet/index.mvp/id/2052 ) ma urządzenia MAX3110E i MAX3111E, które są urządzeniami UART podłączonymi do SPI. Jedną z unikalnych cech tych urządzeń jest to, że mają zintegrowany sterownik linii RS-232. Tak więc, jeśli potrzebujesz, aby Twój UART łączył się z urządzeniem, które wykorzystuje napięcia liniowe RS-232 zamiast poziomów logicznych (np. Komputer), może to być przydatne, ponieważ pozwoli ci to uniknąć dodania kolejnego układu scalonego sterownika linii do twojej płyty.
źródło
Jeśli szukasz rozwiązania sprzętowego, Maxim ma kilka układów scalonych UART z interfejsem SPI do mikrokontrolera (który jest zawarty w twojej części). Spójrz na MAX3100 lub inne opcje tutaj: http://www.maximintegrated.com/products/interface/controllers-expanders/uart.cfm
źródło
Musisz użyć sterownika programowego UART. W zależności od dokładnie tego, czego oczekujesz od tego UART, możesz użyć AVR305 (wyjątkowo kompaktowy, ale nie ma żadnych funkcji poza blokowaniem wysyłania / odbierania w trybie półdupleksowym), AVR274 (sterowany przerwań, dość kompletny), możesz napisać własne oprogramowanie sterownika UART lub możesz użyć tego, który znajdziesz w Internecie, na przykład, przeglądając „avr software uart”
źródło
Krótka uwaga na temat projektowania oprogramowania „UART”: istnieją przynajmniej jakościowo różne podejścia, w zależności od wymagań:
Sterownik bit-bang „przejmuj wszystko” wyłączy wszystkie przerwania i użyje kodu zliczanego do cyklu, aby taktować każdy bit. Odbieranie danych za pomocą sterownika „przejmuj wszystko” wymaga, aby po otrzymaniu danych sterownik robił tylko na nie czekając.
Sterownik bit-bang „przejmujący główną pętlę” będzie zachowywał się podobnie jak powyżej, z tym wyjątkiem, że użyje zasobu timera dla taktowania bitów, a nie zliczania cykli. Przerwania, których obsługa nie trwa zbyt długo, mogą pozostać włączone. W przypadku transmisji szeregowej zasób timera o stałej szybkości może być współdzielony z innymi celami; jednak w przypadku odbioru szeregowego sterownik bit-bang będzie musiał ponownie załadować zegar, gdy nadejdzie bit startowy, tak aby wygasł w połowie każdego nadchodzącego czasu.
W pełni sterowany przerywnikiem sterownik bit-bang używa timera o stałej szybkości, który działa z pewną wielokrotnością szybkości transmisji danych (najlepiej 3x i 5x są lepsze niż 4x) i robi wszystko przez ten zegar. Taki sterownik może działać jednocześnie ze wszystkim innym, ale będzie wymagał szybszego procesora niż poprzednie typy sterowników.
Aby uniknąć sytuacji, w której pierwsze dwa style kontrolera będą wiecznie czekać na dane, które mogą nigdy nie nadejść, często procedury odczytu zawierają wartość limitu czasu. Zauważ, że jeśli pętla kontrolera np. „Pobiera bajt, czekając na niego do 100 ms, zrób inne rzeczy, jeśli nie przyszedł, a następnie pobierz następny bajt itp.” i pojawia się bajt między czasem, w którym procedura „get” kończy się, a kontroler zaczyna ponownie czekać, ten bajt zostanie utracony; urządzenie, z którym się komunikuje, będzie musiało oczekiwać takiej możliwości.
Tylko trzeci styl sterownika będzie w stanie poradzić sobie z możliwością nadejścia bajtu danych podczas przesyłania bajtu danych. Dwa pierwsze style można jednak zastosować w przypadku niektórych protokołów komunikacyjnych pełnego dupleksu, jeżeli kontroler musi mówić tylko wtedy, gdy się do niego mówi. Sztuczka polega na tym, aby mieć procedurę „odczytu i zapisu danych”, która będzie czekać na nadchodzący bit startowy, a gdy zostanie wykryty, nakłada się na odczyt i zapis w taki sposób, że kontroler wysyła każdy bit tak, jak ma zamiar zbadać przychodzące dane. Gdy kontroler wykryje nadchodzący bit startowy, będzie wiedział dokładnie, kiedy będzie szukał kolejnych 8 bitów danych i bitów stopu, i tym samym będzie wiedział, że może bezpiecznie wykorzystać czas pomiędzy wysłaniem własnych danych.
Jedna uwaga na temat podziału: kontroler, który do odbierania danych używa jednego z dwóch pierwszych stylów bit-bang uart, musi przetworzyć każdy bajt danych przed opadającym zboczem bitu początkowego następnego bajtu, aby uniknąć utraty danych. Jeśli kontroler wie, że przetwarzanie zajmie co najmniej pół bita, może zmaksymalizować czas dostępny do przetwarzania, akceptując każdy bajt, gdy tylko pobierze ostatni bit danych, zamiast czekać na bit stopu. Jednak jako dodatkowy sposób na zapewnienie kontrolerowi więcej czasu, może być pomocne, aby urządzenie, które daje mu transmisję danych, miało dwa bity stopu zamiast jednego. Jeśli można skonfigurować „oznaczenie parzystości”, spowoduje to dodanie dodatkowego dodatkowego czasu. Transmisja np. 115200-8-M-2 pozwoli na dłuższy czas przetwarzania niż 57600-8-N-1, nawet jeśli dane będą przesyłane ponad 1,6 razy szybciej.
źródło
Możesz po prostu użyć styku we / wy komputera. Jedyną rzeczą przy przełączaniu lub przesyłaniu danych na tych pinach powinna być częstotliwość pinów podwójna do prędkości transmisji. W ten sposób normalnie działa UART, próbkuje sygnał bitowy na środku.
źródło