Wycofuję się ze stwierdzenia, że to wina niezainicjalizowanych wskaźników!
[syntax=c]unsigned char buffer[3] = {}; // zmienna globalna[/syntax] Za mały bufor na 3 znaki - gdzieś trzeba zmieścić NULL. [syntax=c]buffer=="abc"[/syntax] warunek nigdy nie zostanie spełniony - porównujesz wskaźniki na tablice. Powinieneś użyć coś w rodzaju strcmp().
Ja bym nie ufał i dopisał przed skopiowaniem bufora [syntax=vbnet] If Flaga Then Return[/syntax] a [syntax=vbnet] In_pos = 1 'Zmniejszamy wskaźnik bufora do 0 (usuwamy ramkę)[/syntax] przeniósł przed ten warunek.
He, he, he... Patrz na to: while (1); Nic, co jest dalej, nie ma szans się wykonać, więc kompilator eliminuje zbędny kod. ...A ponadto masz błąd w inkrementacji wskaźnika. idx = (idx + 1) % BUFSIZE; - to najprostszy poprawny zapis tego, co masz zrobić, chociaż nie zawsze daje optymalny kod.
lcd_string jak widać w kodzie potrzebuje jako parametr wskaźnik na tablicę znaków. Czyli nie to co zawiera UDR - znak. Potrzebujesz użyć funkcji wyświetlającej znaki - poszukaj. Albert
Na 99% nie. Można kombinować z auto-reload i transmisją jednego bajtu, o ile uda się przekonać DMA, że docelowy UART jest pamięcią, a nie peryferialem i o ile będziesz miał pewność, że nigdy dane nie będą równocześnie nadchodziły w takim tempie, żeby zapchać nadajnik. Czyli: nawet gdyby się udało, to jest to rozwiązanie wysoce niepewne i zawodne. Co...
To co wpisujesz do rejestru MOAR to jest "adres adresu" (wskaźnik na wskaźnik) a raczej nie o to Ci chodzi... Tym bardziej że w tym kontekście tab to zmienna lokalna, więc i tak nie zadziała jak trzeba. DMA1_Stream6->M0AR = (uint32_t)&tab; 4\/3!!
Dzięki za szybką odpowiedź. Przy okazji zapytam. Jeśli jest wykorzystywana tablica, to szybciej będzie się wykonywało obliczenia z wykorzystywaniem standardowej obsługi, czy obliczeń na niej z wykorzystaniem wskaźników ?
Masz racje, wystarczy tak: [syntax=c] string ComOperator::readFromCom() { string message; getFromSerial(); if (messageLength>0){ for (int i = 0; i<this->messageLength;i++){ message.push_back(data[i]); } } return message; }[/syntax] A co do wartości zwracanej, to próbuję wymyślić jakiś powód dla którego nie chcę zwracać wskaźnika :) Ale wygląda...
Znowu się na chwilkę wepchnę w temat czy podczas inicjalizacji takie równanie da prawidłowy wynik czy mogą wyjść jakieś krzaczory. UART->BRR = (uint16_t) ((fpclk + (baud>>1))/baud); UART to wskaźnik pobierany przez funkcje inicjalizującą
Jest tu co najmniej kilka błędów. Pierwszy to taki, że funkcja uart_getc nie jest atomowa. W ogóle kolejka jest zrealizowana źle - nie uwzględnia, że odczyty/zapisy następują asynchronicznie, w związku z tym pewne operacje (np. uaktualnienie wskaźników początku i końca) muszą być robione atomowo. Przypadkowo to działa przy zapisie, bo ISR jest wykonywane...
Bufor cykliczny, inaczej też nazywany kołowym, to najlepsze rozwiązanie do tego co chcesz zrobić. Tym bardziej, że jak zaznaczyłeś danych będzie sporo. Każdy odebrany znak wpisujesz do bufora i przesuwasz wskaźnik zapisu o 1. Możesz to robić przez obsługę przerwania od portu szeregowego, albo możesz do tego wykorzystać DMA. Dlaczego bufor? Ponieważ...
Dynamic Battery Simulator 2281S-20-6 Keysight N6705B DC Keithley Series 2300 Battery Simulating DC - model2306,2308 Keithley 6060B-J08 Special Order Electronic Load Cadex C8000 ale i Cadex serii C7000 Rigol DL3000 Series DC Electronic Load ewentualnie ACCUMASTER C5 (• Zintegrowany Datenlagger do zapisu przebiegu krzywych ładowania/ rozładowania...
To dotyczy raczej bibliotek C18 niż samych mikrokontrolerów. putsUSART: Write a string from data memory to the USART. putrsUSART Write a string from program memory to the USART. Jeżeli funkcja której parametrem jest wskaźnik do pamięci RAM otrzyma wskaźnik odwołujący się do pamięci programu lub odwrotnie, to odczyta "śmieci". Przy wielu innych funkcjach...
Super skompilowało się działa. Ale Build Output Parser nie przechwytuje ścieżek includes i symboli. Jego ustawień nie zmieniałam, Freddie w temacie Link podał link gdzie zalecane są te same ustawienia. I nic. W ramach poszukiwań problemu usunąłem z ustawień "(gcc)". Zaskoczyło, ale to nie powinno tak być. Zmieniłem | na ||. i działa. Jestem z goła...
Schematu nie widzę. Napisałem Ci już jakie tranzystory możesz tam zapakować. Kosztują <0,50PLN/sztukę w TME, więc tanio. W dokumentacji do wyświetlaczy sprawdź maksymalny prąd i na początek ogranicz prąd maksymalny do tej wartości (prawdopodobnie 20-60mA). Program do napisania od nowa. 1. Po co zewnętrzny prescaler, jeżeli licznik TIM0 ma wbudowany...
Sprzętu się nie czepiaj. HardFault może być powodowany przez różne rzeczy, z popularniejszych to za mały stos lub popsute operacje na wskaźnikach. Zamieść cały kod jaki masz. I po co ten FlashUnlock na początku?
To może być właściwy trop. Jestem jeszcze w pracy, więc nie podepnę Dragona. Kiedyś wgrywałem Twój program "RS232overUSB". Zciągałem wtedy jakieś sterowniki. Jak sprawdzić faktyczną częstotliwość zegara? Oscyloskop (przykładany gdzie?), wskaźnik stanów logicznych, miernik częstotliwości?
Jeżeli masz jeszcze jakieś wolne wyjście x możesz zrobić to tak: 2 - iloczyn logiczny wejść 7,x 8 - zasilanie w czuwaniu (podaje ten sygnał na wejście ROPAM przez co mogę SMSem sprawdzić czy alarm jest UZBR/ROZBR) 7 - wskaźnik czuwania z negacją x - sterowanie bramą
Witam wszystkich! Jak stworzyć dynamicznie obiekt reprezentowany przez wskaźnik na tenże obiekt? Sedno problemu polega na tym, że mam klasę. Zdefiniowany wskaźnik na obiekt tej klasy zainicjowany wartością NULL. W trakcie życia programu chcę w pewnym momencie powołać do życia obiekt, wykorzystać, po czym zniszczyć. Nie chcę marnować pamięci (a na razie...
No dokładnie, o poolingu zapomnij. Najprościej zrobić tak jak pisze Mirek, bufor (niekoniecznie cykliczny), ale po prostu tablicę zawierającą wskaźniki do kolejnych komunikatów. W procedurze obsługi przerwania TX, wysyłasz bieżący komunikat, jeśli wysyłka jest zakończona to sprawdzasz czy w tablicy jest jakiś oczekujący i rozpoczynasz jego wysyłkę....
Czy aby przypadkiem sizeof(dane) nie zwróci 4 (rozmiar wskaźnika) i nie powinno dać się czegoś w stylu strlen(dane)? Pozdrowienia, m.ki
Nie no... nie jestem aż takim amatorem, żeby nie zdawać sobie sprawy z długości bufora. :) Używam sizeof :) W pliku ee_dbase.h mam takie definicje: #define DBREC_LEN sizeof(t_st_dbrec) // długość bajtowa rekordu danych #define DBROW_LEN 16 // długość wiersza na rekord w bazie A co do wskaźnika, to go sobie wyświetlam przez USART i stąd wiem....
es2 napisał: Żeby się nie zamykać na 16/32 bity. Jak nie 16, to wcale nie musi być 32 dlatego że avr-gcc int jest 16 bit, long 32. Nie matypów 12,13,15,24 czy 30 - właśnie dlatego. W avr-gcc są typy 24-bitowe - nie tylko wskaźniki, ale także jest typ 24-bitowy int i uint.
tylko 15 znaków dokładnie 14, null dodaję na końcu tablicy (miały być operacje na stringach, ale może się ogarnę bez tego) to LCD od nokii 3310 na pcd8544 chciałem "na szybko" zrobić konsolę do usart, bo nie mam drugiego usart do wyświetlania tego co biega po pierwszym, a przesiadanie się na xmega nie ma sensu...
Próbuje napisać coś w stylu klasy ale stanąłem w miejscu. Klasa ma obsługiwać usart. W pliku H zadeklarowałem strukturę która przechowuje m.in. wskaźniki na funkcje, a w konstruktorze do tych wskaźników przypisuje funkcje. Plik h // usart type powinien być różny w zależności od obiektu który wywołał funkcję! //while (!(module->usart_type->SR & USART_SR_TXE));...
strasznie żeś nakombinował ja wysyłam tak stringi void USART_Transmit_string( char *text ) { while(*text) USART_Transmit(*text++); } void USART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ); /* Put data into buffer,...
Wyciągam z niebytu ale akurat grzebię w Poly-800 z podobnymi objawami. (są napięcia a nawet trochę sygnałów ale układ niezyje). Co do kwarcu w Poly-800 to jest to 6MHz Jak komu to pomoże to tu trochę moich "odkryć" (jedyny krążący po sieci schemat jest faktycznie makabrycznym skanem chyba równie nieczytelnego oryginału drukowanego): Procesor główny...
A co myślisz o takim rozwiązaniu? Zda egzamin takie sprawdzenie UDR: [syntax=C] #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <stdio.h> #include <avr/interrupt.h> #include "HD44780.h" volatile uint16_t tempw, tempx; volatile uint16_t cz_d, cz_u; char tab1[8], tab2[8], tab3[8], tab4[8]; volatile...
Witam ;) Napotkałem dzisiaj dziwny problem. Mam zdefiniowaną strukturę: typedef struct test_struct { uint16_t data; unsigned char adress; unsigned char komenda; unsigned char ilosc_danych; unsigned char dane[5]; unsigned char CRC; }ramka, *ptr_ramka; Definicja elementu oraz wskaźnika zrealizowana jest w następujący sposób ramka DoWyslania;...
Hmmm uruchomiłem to w CV 1245 i mam tylko 2 błędyze wskaźnikami i jeden dotyczący braku funkcji main ???????? Ty chyba uruchamiałeś to na 1244.
Z ciekawości sprawdziłem, która się szybciej wykonuje: void Tekst_USART(char *wskaznik) { char znak; while((znak = *(wskaznik++)) != 0) 2f0:fc 01 movwr30, r24 2f2:21 91 ldr18, Z+ 2f4:80 e6 ldir24, 0x60; 96 2f6:90 e0 ldir25, 0x00; 0 2f8:22 23 andr18, r18 2fa:d1 f3 breq.-12 ; 0x2f0 <main+0xe>...
Zakładając, że konfiguracja USARTa jest w porządku, to problemem są typy. Próbujesz użyć funkcji wysyłającej ciąg znaków do wysłania pojedynczego znaku. Opcje masz dwie: w przerwaniu odbierzesz znak, wpiszesz go do to tablicy o minimum 2 elementach (drugi element to null character) i podasz do funkcji _puts (BTW nazwa pochodzi od PUT String), albo skorzystasz...
Witam Postanowiłem zapytać tutaj, ponieważ wydaje mi się że to odpowiedni temat. Uczę się programowania na bazie STM32. Teraz poznaje porty USART i pojawił się problem: Temat wydzieliłem, ponieważ nie ma nic wspólnego z poprzednim.
Charakterystyczną właściwością bufora cyklicznego (kolejki FIFO) jest to, że wskaźniki początku i końca (odczytu i zapełniania) przemieszczają się niezależnie - każdy w swoim tempie. Stąd w Twoim programie indeksy powinny być niezależnymi zmiennymi globalnymi/statycznymi. Przypisanie liczniku=usartbufferlicznik zakłóciłoby normalny tryb pracy bufora...
Traktuj warning jako error. Koniec, kropka. Od tej zasady są tylko nieliczne wyjątki. Inne traktowanie warningów prowadzi do poważnych problemów, a z przykładów, które pokazałeś wynika, że sobie nawet nie zdajesz sprawy do jak poważnych. 1. warning: "F_CPU" redefined - piekielnie istotny błąd. Gdzieś masz zredefiniowany symbol F_CPU - w efekcie istnieje...
Wielkość bufora, to minimum wielkość pakietu +1. Zaproponowałem 256 bajtów, ponieważ wtedy odpada konieczność pilnowania wartości 8-bitowego wskaźnika. Nie musisz go zerować, bo sam się zeruje. Możesz mieć bufor na 9 bajtów, ale będziesz musiał ciągle sprawdzać i zerować wartość wskaźników, a przy okazji pojawią się drobne uciążliwości w wyznaczaniu...
Ja kiedyś na AVRku zrobiłem bufor kołowy zapis do końca bufora a potem od zera. Jeden wskaźnik na zapis do bufora (wyzwalanie pomiaru z timera), jeden wskaźnik na odczyt (w wolnej chwili procesora) zapis inkrementował jedną zmienną a odczyt wysłanie RSem dekrementował (jak zmienna za wysoko urosła to przepełnienie bufora (usart się nie wyrabiał ) Ograniczenie...
Staram sie napisac program z analiza przewidzianych potwierdzen i nie przewidzanych zdarzen w module GSM(sms, ring itd.). W jaki sposob skonstrulowac bufor cykliczny i parsowanie odpowiedzi ? Moze zastosowac nieskonczony bufor, a odczytane i przeanalizowane dane kasowac i przesuwac wszystko w lewo ? Jak sie za to zabrac ? W przerwaniu zawartość rejestru...
Witam. Napisałem następujące podprogramy: .EQU POCZATEK_PROGRAMU_H = 0x00 .EQU POCZATEK_PROGRAMU_L = 0x90 .EQUPROGRAM_WSK_H= $60 .EQUPROGRAM_WSK_L= $61 PROGRAMOWANIE_: CLI;blokada przerwania LDI R20, KOM_BRAK_ROZKAZU // kasowanie rozkazu LDS XH, PROGRAM_WSK_H ;pobranie aktualnego adresu wskaznika programu LDS XL, PROGRAM_WSK_L KOM_PROG_: WDR;zerowanie...
[syntax=c]#define USART_BAUDRATE 2400 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <inttypes.h> #include <hd44780.c> unsigned char CRC8tab[256] = { 0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15, 0x38,0x3F,0x36,0x31,0x24,0x23,0x2A,0x2D,...
generalnie z tego kawałka kodu wynikałoby, że zmienna pobranyciag jest wskaźnikiem do jednoelementowej tablicy (zawierającej po zaincjalizowaniu tylko \0). Dlatego nic się w niej nie mieści i wszystko co getsr do niej wstawia jest potem zamazywane przez jakąś inną procedurę. Jeśli pobranyciag może mieć maksymalnie kilka-kilkanaście znaków, to zadeklaruj...
Witam! Chcę wgrać parę danych do pamięci mikrokontrolera STM32F107 (ustawienia domyślne). Nie wiem za bardzo jak powinien wyglądać kod linkera do takiego zapisu? Korzystam z CodeSourcery ze strony Freddiego. Nie posiadam debuggera, więc kod mogę wgrywać tylko poprzez bootloader na USART. Pamięć chciałbym zapisać paroma danymi 32bit, a następnie mieć...
Odpowiedź jest wyżej: 5ms/div Zrobiłem zgodnie z propozycją: zakomentowałem linie dotyczące USART. Wynik: USART zakomentowany, linia z przesuwaniem value "aktywna". http://obrazki.elektroda.pl/7410206800_1... Niektóre jedynki są pomijane. Nadal obstaję przy swoim, że modyfikowanie value w przerwaniu trwa zbyt długo, a USART nie ma tu...
Pokaż funkcję LCD_WriteText(), bo sądzić można, że jako parametr zawiera wskaźnik na tekst i nie służy do wyświetlania liczby 8-bit. Jeśli jest tak jak napisałem, to musisz najpierw przekonwertować liczbę na ciąg znaków ASCII i zapisać w buforze (tablicy) i dopiero funkcji LCD_WriteText() wskazać jej początek. Przykłady: http://mikrokontrolery.blogspot.com/2011...
Do funkcji uip_ipaddr() oraz uip_sethostaddr() pierwszy parametr powinien być przekazywany jako wskaźnik, czyli: uip_ipaddr_t addr; uip_ipaddr(&addr, 192,168,1,2); uip_sethostaddr(&addr); Oczywiście zakładając że korzystasz ze stosu uIP a nie czegoś co podobnie nazywa funkcje Sprawdzałem już to wcześniej, po przekazaniu tego...
Ja na samym początku przerzucam wektory przerwań na początek pamięci RAM. A później wstrzykuję swoją funkcję w miejsce oryginalnego wektora. Po rozmyślaniu na ten temat doszedłem do następujących wniosków. 1. Możliwość dynamicznej rejestracji przerwań (najlepiej w wysoce abstrakcyjny sposób, tak aby funkcje nie musiały być publiczne) byłaby z pewnością...
Witam. Parę pytań, przemyśleń, proszę o wypowiedzenie się. Temat dotyczy programowania embedded C głownie mikrokontrolerów raczej większych 32 bitowych. 1. Stosowanie wielu zmiennych globalnych jest bee Czy w świecie embedded bez dynamicznej alokacji pamięci da się inaczej? Zakładając, że mamy jakieś stałe duże struktury globalne (zawierające mnóstwo...
Pomieszałeś dwa sposoby obsługi transmisji - nie można stosować dwóch w tym samym czasie. Proponuję tu obsługę na przerwaniach i do niej się odniosę. 1. Nie widzę wywołania inicjalizacji nadawania USART w main(). Powinno to polegać na włączeniu na stałe TXCIE. UDRIE natomiast włączasz na starcie transmisji i na jej końcu wyłączasz. 2. W przerwaniu od...
Absolutnie nie mam pojęcia co chcesz zrobić. Program który wstawiłeś jest kiepski: 1) Nie baw się w takie skomplikowane ładowanie danych ldi r17, 1<<CS02 out TCCR0, r17 in r16, TIMSK //tryb normalny sbr r16, 1<<TOIE0 out TIMSK, r16 //przerwanie od przepełnienia Tylko zrób to na brutala, bo tutaj niczym to nie grozi: ldi r16, (1<<TOIE0)...
Argumentem funkcji USART_Transmit_Word() powinien być wskaźnik na tekst, a ty przekazujesz też jakieś stałe w postaci liczb (np. TOSCA). Transmitowana będzie kaszana. Wrzuć konstrukcję pętli głównej, bo ten błąd wygląda na problem ze stosem.
Witam, Naciąłem się na problem z przerwaniami z którymi nie mogę sobie jak na razie poradzić. Jeśli w bootloader'ze nie wykorzystam przerwać, to po skoku do aplikacji wszystko działa ok, jeśli natomiast zostanie tam wykorzystane, to aplikacja już ich nie wykonuje. Wydaje mi się że ma to związek z wskaźnikiem przerwania, ale nie mogę znaleźć rejestru...
Jeśli bym miał jakoś rozwiązany problem ładowania i aku nadający się do tego to myślę że problemu ze złożeniem bym nie miał bo jeśli się nie mylę do do USB trzeba jakiś stabilizator więc 3szt na 3 porty bez problemu, 12v to tylko gniazdo, no a ten problemik to układ wskaźnika naładowania chyba i tylko polutowania tego, no i żeby to poprostu że tak powiem...
Szukam agregatu. Marzeniem by było stworzyć automat, że w przypadku przerwy w zasilaniu przełącza się automatycznie wszystko na agregat. W przyszłości myślę o fotowoltaice (ale dziś nie ma to sensu). Komputery/kotłownia posiadają UPSy. TV/lodówka i inne wrażliwe urządzenia już nie. Posiadam gaz, ale koszt agregatu byłby chyba ogromny. Rozważałem Yamaha...
...zwierając wyjscia z MAX232 do procka otrzymuje echo... Nie bardzo rozumiem co zwierasz i gdzie otrzymujesz to echo (w terminalu?). Zresztą to świadczy może o prawidłowości połączeń, ale echo otrzymasz nawet wtedy, gdy prędkości transmisji i/lub ustawienia w procesorze i w PC będą się różnić. Taka sytuacja może mieć miejsce np. jeżeli nieprawidłowo...
Witam Mam dosyć spory problem z parsowaniem tekstu, mianowicie użytkownik może w terminalu wpisać sobie taką o to składnie. Silnik 3,5;Silnik 5,25;Silnika 7,45; Ma to podzielić na "Silnik 3,5" , "Silnika 5,25" itp; Robię to w następujący sposób: -gdy z USARTa przychodzi ciąg znaków zakończonych znakiem '\0' wychodzi do przerwania gdzie tworzona jest...
Sorki, ze moze tak troche offtopic pytanie jeszcze zadam, ale dlaczego funkcja sizeof() w mojej funkcji zwracala mi zawsze wartosc 3, natomiast w funkcji main dzialala normalnie?? Potrafi ktos mi to wytlumaczyc ? A to akurat bardzo proste jest ;) Do swojej funkcji przekazujesz zmienną char text A najlepiej całość w przerwaniach zrobić. Byłbyś tak miły...
A tutaj jest kod programu który służy do wyświetlania znakow na matrycach LED 5x7, które wysterowywane sa przez uklady MBI5026 podpięte do Atmegi128. A cała rzecz polega na tym ze w funkcji Matrix chciałbym sie pozbyć ifów i elsów tak żeby to robić w jednej pętli. [syntax=c]#include <stdio.h> #include <avr/io.h> #include <string.h>...
No coż transmisja działa na skompilowanym programie aż miło. Teraz przechodzę do napisania programu pod moje potrzeby. Na początek chciałem przenieść program napisany w starszej wersji kompilatora na nowszy. Chciałem, bo niestety mi się to nie udało. :( Naniosłem poprawki i skompilowałem program. Po wgraniu na uC silnik kręci się dość wolno, a powinien...
Witam Mam problem posiadam dwa silniki 3 fazowe po 200kW z softstartami . Rozruch odbywa się bez problemów natomiast podczas wyłączenia zaczynają sie problemy. Po pierwsze: 1. Na wskaźnikach widnieje np. L1-600A L2-000A L3-600A co dziwne środkowa faza nie obciążona. 2. Spadek napięcia( lub jakies "harmoniczne" itp tak ze upsy się załączą na chwile)....
No i paczka doszła. Szybko zrobione na stykówce, i wyświetlacz działa, ale coś jest nie tak, oraz nie widzę komunikacji. Nadajnik: [syntax=Bascom] $regfile = "m8def.dat" $crystal = 1000000 $hwstack = 40 $swstack = 16 $framesize = 32 Config Portb.1 = Input Portb.1 = 0 Config Portd.3 = Output Config Pind.1 = Output 'PIN TXD Set Portd 'PIN TXD Enable Interrupts...
Po co ten wskaźnik na dane? Zrób: volatile unsigned char znak; ISR(USART_Rx_vect) { znak = UDR; } Po co czekanie na RXC == 1 w przerwaniu uarta? Przecież jest to warunek wygenerowania przerwania.... Zapis: UCSRC = ~_BV(UMSEL) oznacza, że przypisujesz do UCSRC wartość 10111111. Chyba nie o to Ci chodziło. Pozdrawiam, Dr.Vee
(...) Mianowicie trafiłem na Sprawa jest prosta, wymaga jedynie wiedzy o tym, czym są wskaźniki, a to można sobie doczytać. Tablica w C jest w rzeczywistości wskaźnikiem na pierwszy jej element. Czyli mając tablicę char I jeszcze jedno. Dobrze rozumiem, że dozwolone jest stosowanie instrukcji zmienna++ np. w argumencie funkcji albo indeksie tabeli?...
Użycie DMA ma sens jeśli robsz w miarę proste przesłanie z punktu A do punktu B, najlepiej jeśli ta operacja może odbywać się asynchronicznie w stosunku do reszty kodu i jeśli przesyłana ilość danych jest duża lub przesłąnie zależy od jakiegoś czynnika, np. pojawienia się danych na USART, SPI, czy innym wolnym ukł. peryferyjnym. W twoim przypadku DMA...
Po wystąpieniu błędu program działa dalej, wszystkie pozostałe funkcje działają poza odbiorem danych z RS485. Debuguje z wykorzystaniem ST-Link/V2 (SWD) środowisko AC6. W jakim oknie widać te "skoki"? Zaczynam kopiowanie od 3-go bajtu, bo pierwsze trzy bajty to informacje o przesyłanej ramce. struktury zadeklarowane są w pliku main.c a ich adresy przepisane...
Podepnę się do tematu. Wykonałem projekt trackloggera rejestrującego dane gps i zapisującego je na karcie SD. Całość wykonałem na atmedze644 i śmiga bardzo dobrze. Pragnąłem dalej rozwinąć ten projekt i podłączyć wszystko do atmegi32, dodając jeszcze wyświetlacz. Podczas testów zmienionego pod atmegę32 kodu zaczęły się dziać dziwne rzeczy. Z gpsem komunikuję...
Włączyłeś przerwania, jednak nigdzie nie masz procedury obsługi dla RXCIE i TXCIE. Wywołanie przerwania powoduje skok programu pod adres zdefiniowany w tablicy wektorów przerwań, czyli w Twoim przypadku reset procka. Druga sprawa to błąd w tej funkcji. Ona nigdy się nie zakończy, gdyż brakuje inkrementacji wskaźnika s w pętli. Ale zakładam, że to błąd...
Z przetwonika ADC otrzymuję wartość 16 bitową (ADC1->DR), którą chce następnie wyświetlić na wyświetlaczu. Funkcja wypisująca stringi na LCD pobiera wskaźnik do tablicy, ciagu znaków void Text (uint8_t *str) Wywołanie: Text ("dowolny tekst"); Potrzebuje w jakiś sposób przekonwertować typ 16-sto bitowy do tablicy znaków które...
Dla przykładu ja lubię taką formę: https://github.com/marcinszajner/Half-br... Idealnie tutaj to praktycznie kopia z exampla od ST z ich z zestawu STM32Cube_FW_G4, ale dobrze pokazuje że w embedded zamiast klasy, struktura nadaje się wyśmienicie. What? Temat o C++17 a Ty wrzucasz najzwyczajniejszy kod w C z...
czyli twierdzisz że to powinno pomóc? zaraz sprawdzę :P hmmm, no i dalej się nie komunikuje z tym programem, ma być komunikacja synchroniczna? Na synchronicznej nic nie śle do terminala nawet aktualny kod .INCLUDE "m128def.inc" ; SEGMENT DEKLARACJI .EQU OSC_FREQ= 11059200; częstotliwość pracy w Hz .EQU RS_BAUD= 57600 ; prędkość transmisji...
Witam, Na wstępie dziękuję za zainteresowanie i chęć pomocy. Oczywiście źle się wyraziłem. Nie mam zamiaru umieszczać linuxa na atmedze. Po prostu na komputerze mam linuksa i myślałem, że są jakieś specjalne biblioteki Modbus'a dla kompilatorów pracujących pod linuksem. Założenia na ten tydzień miałem takie: napisać program na atmege tak aby była slavem...
A kompilator nie krzyczy ostrzeżeniami? Twoja funkcja Usart_wysylanie() przyjmuje na wejściu unsigned char, a w wywołaniu przekazujesz wskaźnik na char. Normalnie kompilator rzuca ostrzeżeniem. Teraz tak - Usart_wysylanie() przyjmuje na wejściu bajt danych binarnie i wysyła jego wartość tekstowo - nic dziwnego, że nie da się wysłać liczby wiekszej,...
Witam, Mam pewien problem powiazany z UARTem pod atmega8l... Otoz mam pewnien program ktory pieknie dziala pod attiny2313(UART sprawny, komunikacja rs232<=>pc tez dziala dobrze). Problem narodzil sie, gdy chcialem przeniesc ten program na atmege8l... Podejrzewam, ze problem lezy we flagach... Nie znam sie jeszcze na tyle dobrze na C, zeby problem...
Rozwiązanie jest proste - stosować _delay_us z <util\delay.h>. Przy 1MHz co prawda można minimalnie mieć 3us opóźnienie, ale w tym przypadku jest to bez znaczenia. A BTW, dziwię się po co tak komplikować prostą sprawę jaką jest obsługa 1-w, skoro nawet w notach aplikacyjnych Atmela pokazane jest jak to zrobić na USART, bez jakichkolwiek opóźnień,...
Witam wszystkich. Od jakiegoś czasu ćwiczę STMy. Przyszedł czas na bootloader, ale stanąłem w zasadzie na początku drogi. Mój zestaw to: - ARM GCC (Linaro) w wersji 4.7 2012q4 - CooCox - STM32F4 Discovery - przykład AN3965 "STM32F40x/STM32F41x in-application programming using the USART" Po kolei: - istniejący i działający program zlinkowałem z użyciem...
Szanowni Forumowicze, uruchomiłem sobie sprzętowego UARTa wykorzystując bibliotekę ze strony atmela. Wszystko działa, łączę się z terminalem na komputerze, wyświetla się to co powinno. Dodałem też funkcję do wysyłania całego łańcucha znaków wykorzystując wskaźnik, gdyż w atmelowskiej bibliotece znalazłem jedynie do wysyłania konkretnych pojedynczych...
Czy ktoś zmusza Cię bronią do używania tej biblioteki? Przecież żeby wystartować transfer trzeba (z tego co pamiętam) wykonać JEDEN zapis do JEDNEGO rejestru, a ty chcesz wywoływać 3 funkcje... To już szybciej będzie te dane ręcznie kopiować... Tutaj masz np przykładową PEŁNĄ konfigurację dwóch kanałów DMA do SPI (brak oczywiście konfiguracji SPI, czy...
Jaką masz szybkość transmisji przez UART? Na moje oko to jesz źle: USART_Transmit_String_P(dni[d.WeekDay]); - poneważ wektor dni[] jest w PROGMEM, wskaźnik musisz czytać przez pgm_read_word()
Witam, Pracuje nad kodem programu do komunikacji przez UART (mikrokontroler <-> komputer) i zastanawiam się nad sposobem implementacji w przerwaniach. Na razie zrobiłem to w taki sposób: - Nadawanie danych wykonuje w taki sposób, że w programie głównym zmieniam w wskaźniku adres początku tablicy którą aktualnie przesyłam przez UART, w przerwaniu...
W porównaniu z Raspberry Pi ilość chociażby RAM-u nie robi jednak sporego wrażenia. Poza tym ja chętne widziałbym jakieś urządzenie, które fabrycznie miałoby wyprowadzone złącza GPIO, USART oraz SPI, w postaci złącz na płycie głównej. Tak, aby nie trzeba było się podlutowywać cienkimi kabelkami pod diody albo piny procesora. BTW czy moc obliczeniowa...
jeeeez!!... "czegoś mi tu brakuje" jest chyba zbyt ogolnym stwierdzeniem aby cokolwiek pomóc... Zrobilem sam na dokladnie tych samych STMach conajmniej 5 roznych interfejsów CAN<->UART i za tydzien bede robic kolejny... Więc mogę podpowiedzieć: 1) TXuj UARTa przez DMA. Tylko. Zawsze. Najzawszej... 2) Tego UARTa TXuj przez DMA z bufora kołowego....
Jeżeli używasz klasy Serial, to tam to już jest zaimplementowane. Jeżeli nie, tu uważaj na możliwe problemy linkera (duplicate reference, symbol already defined), bo domyślna funkcja main, ta, która w pętli odwołuje się do funkcji loop, ma referencję do klasy Serial i przez to, może nie być możliwe instalowanie własnej obsługi przerwania UDRE_vect,...
Witam. Z małymi pomocami mam taki kod: [syntax=basic4gl][/syntax]$crystal = 8000000 $regfile = "m1284def.dat" $baud = 19200 Dim W As Byte Config Timer2 = Timer , Prescale = 256 Config Portb.3 = Output Reset Portb.3 Config Portb.4 = Output Reset Portb.4 Dim Buffer_in(32) As Byte Dim In_pos As Byte Dim Dana As Byte Dim Poldana As Long Dim Polowa As Byte...
Witam, Głowię się od jakiegoś czasu jak rozwiązać następujący problem. Piszę program na procesor STM32F4, który miałby po RS232 wysyłać dane zawarte w strukturze: [syntax=c]struct rs232_data { int a; int b; int c; }; struct rs232_data dane; dane.a = 12; dane.b = 34; dane.c = 76;[/syntax] Póki co to przykładowa struktura, która ma na celu wyłącznie przetestowanie...
Prawdę mówiąc wg. mnie robienie tego na AVR to tylko w ramach ćwiczeń bo sens użytkowy tego jest mały. Do audio wystarczy. W necie pojawiło się tego sporo, na Allegro można tez kupić, tyle, że są to w zasadzie dwa projekty (jeden C, drugi BASCOM) powielane z istotnym błędem w postaci drabinki R-2R i to o zgrozo z rezystorów 5%. Swego czasu miałem taki...
IRQ tester https://obrazki.elektroda.pl/3243423400_... IRQ Tester to proste narzędzie, głównie do testowania czasu odpowiedzi na impulsy, lub czasów międzyzboczowych dostarczonego sygnału. Program został napsiany na ukontroler AVR Atmega168, a jego głównym zadaniem jest funkcja multiwibratora monostabilnego, którego działanie polega...
Witam wszystkich Otóż szukam na necie, ale wydaje mi się, że wszystko zrobiłem tak jak należy..a problemem jest wskaźnik void jako argument funkcji. Stworzyłem funkcję: void usart_transmitnr(static void*transmit) -> w osobnym pliku w main tworze zmienną, np int a..i kiedy chce wpisać: usart_transmitnr(a) - > to wyskakuje mi błąd ze kompilator nie może...
Odbieraj po kolei znaki do bufora w przerwaniu np ISR(USART_RXC_vect) a jak odebranym znakiem będzie umowny znak końca (moze byc enter=0x0d) dodaj na koniec zero i wróć z wskaźnikiem na początek bufora, w buforze będziesz miał prawidłowego stringa. Zabezpieczył bym się też przed ponownym nadpisaniem bufora zanim odczytasz odebrany łańcuch.
http://obrazki.elektroda.pl/1852929500_1... http://obrazki.elektroda.pl/5115381900_1... Mimo upływu lat w dalszym ciągu lubię od czasu do czasu odświeżyć sobie w pamięci elektroniczne brzmienia lat 80tych, kiedy to po raz pierwszy miałem okazję usłyszeć „syntetyczną” muzykę pochodzącą z wielkich drewnianych...
Po pierwsze proponowalbym zmienic troche ta funkcje: void wyslij_znak(unsigned char znak) // bylo: unsigned int { if (znak == '\n') znak = '\r'; // bylo: wyslij_znak('\r'); while (!(UCSRA & (1<<UDRE))); UDR = znak; } A tak w ogole to masz moj fragment kodu: :D typedef unsigned...
Witam. Krótko, program pobiera z rs 8 bajtów(w pętli while ) ,bajt 1 i 2 wpisuje na pwm a w T2 wysyła prędkość a problem polega na tym że w debuggerze po włączeniu sei program nie chce przejść do linii, gdzie rozpoczyna się pętla while i nie wiem dlaczego (nie działa nawet gdy nie ma ustawionych żadnych rejestrów )(zew kwarc 4mhz). Z góry dziękuję za...
Witam, mam problem z kodem ( no właśnie, to sie okaże :) ): #define F_CPU 16000000UL #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/pgmspace.h> #define UART_BAUD 115200 //prędkość transmisji #define UART_CONST (F_CPU/((16*UART_BAUD)-1...
Zamierzam użyć pilota do dekodera philips PVR 7201/91 jako nadajnika podczerwieni. Odbiornik TSOP 1136 (lub 38, czy to coś zmienia??). Aby wiedzieć co dokładnie jest odbierane przez odbiornik przy naciśnięciu poszczególnych przycisków, napisałem program, którego efektem ma być wyświetlenie elementów tablicy, której elementy są czasami trwania kolejnych...
Bardzo często pisząc programy posługujemy się zmiennymi lokalnymi, które teoretycznie zwalniają pamięć jeśli nie są używane... ale dlaczego przestawiając podział pamięci na zewn. SRAM (kostka 62256), zmienne te jakby się nie inicjowały i program się wywala? Przykład: dodałem do makefile LDFLAGS += -Wl,--section-start,.data=0x801100,--def...
http://obrazki.elektroda.pl/7154876600_1... Boberov Unbelievable Boot Loader V0.1 2013 Na wstępie skrócone informacje na temat projektu którego szerszy opis znajduje się w dalszej części tekstu. Program bootloadera przeznaczony jest dla ATMEGA8 (po minimalnych zmianach każdy AVR z wystarczającą ilością pamięci), umożliwia programowanie...
Witam ja też się chciałem pochwalić pewnym pożytecznym dla mnie urządzeniem otóż mieszkam trochę poza miastem , i to wcale nie za dużym , gdy budowałem dom chodziło za mną zrobienie jakiegoś awaryjnego zasilania , ponieważ instalacje elektryczną w domu robiłem samodzielnie , zrobiłem ją w ten sposób że prawie w każdym pomieszczeniu mam główne źródło...
1. Najpierw przczepie się do PuTTY - nie jest to najlepszy terminal do prac debuggerskich... 2. Co dokładnie robi funkcja USART_TX( ) ? 3. Zdecyduj się na czym chcesz pracować - na indeksie tablicy, czy na wskaźniku? 4. Nigdy nie rób czegoś takiego jak "pierwszy bajt w pętli głównej a reszta w przerwaniu". Albo wysyłasz wszystko z pętli głównej poll-ując...
Mam problem z przkeształceniem typu danych ASCII pobiernach przez urat na int. #include <avr/io.h> #include <avr/pgmspace.h> #include <stdlib.h> #include <avr/interrupt.h> #include <avr/signal.h> #define FCPU 8000000 //częstotliwość oscylatora CPU #define VUART 38400 //prędkość transmisji [b/s] #define VUBRR FCPU/(VUART*16)-1...
Do autora tematu. Nie rozważasz jednej ważnej kwestii. Mianowicie sposobu przełączania z zasilania sieciowego na zasilanie awaryjne. Widać, że najważniejsza jest cena, ale nie ma innych założeń. Z założeń wynikają kryteria oceny przydatności danego źródła awaryjnego. A teraz praktyka. Pytanie: czy przełączenie ma następować automatycznie czy może ręcznie...
http://obrazki.elektroda.pl/4326129700_1... Ostatnio zrealizowany projekt, zapewne dokładnością nie wybija się ponad przeciętność, w zamyśle miał to być pomocniczy zasilacz większej mocy, bo stary coraz częściej okazuje się niewystarczający. Przy okazji chciałem wykorzystać graty przeznaczone i tak na śmietnik. Mechanika Obudowa to...
przerwa usart esp8266 usart usart printf
dioda schottky anoda dioda alarmu świeci cobra słaby iskra honda
eaton hager samsung wf70f5e0w2w
Łożyska do silnika turbiny kominkowej: 608ZZ, 608RS, hybrydowe Gdzie kupić łożyska 608ZZ, 608RS i hybrydowe?