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



Teraz jest 24 kwi 2024, o 06:29


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 108 ]  Przejdź na stronę Poprzednia strona  1, 2, 3, 4  Następna strona
Autor Wiadomość
PostNapisane: 25 lis 2012, o 15:23 
Offline
Użytkownik

Dołączył(a): 20 mar 2012
Posty: 159
Pomógł: 6

Ja też niedługo chcę użyć tych modułów i przestudiowałem sobie oba datashety (od rfm70 i rfm73) i nie znalazłem nawet jednej różnicy w rejestrach.I teram mam pytanie czy to prawda czy jednak trzeba coś będzie zmienić w bibliotekach.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lis 2012, o 16:14 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

luki napisał(a):
Ja też niedługo chcę użyć tych modułów i przestudiowałem sobie oba datashety (od rfm70 i rfm73) i nie znalazłem nawet jednej różnicy w rejestrach.I teram mam pytanie czy to prawda czy jednak trzeba coś będzie zmienić w bibliotekach.


To niestety źle szukałeś tych różnic. Są na pewno i to takie, że biblioteki do RFM70 nie powinny działać na RFM73. Mówię to wprawdzie nie na bazie tego że sam już zdążyłem przerezać noty PDF ale dostałem informację od może nie samego producenta ale dużego dystrybutora tych układów - na temat istotnych różnic, które trzeba wziąć pod uwagę i przerobić kody dla RFM70

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sty 2013, o 17:05 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Od jakiegoś czasu piszę program do obsługi RFM70 i nie tylko. Natrafiłem na następujący problem. Posiadam bibliotekę z tego źródła: http://freakone.pl/post/16/obsługa-modułu-rfm70-za-pomocą-mikrokontrolerów-avr/
I teraz moje pytanie odnośnie wysyłania danch. Taka jest deklaracja funkcji:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kod programu wpisujemy korzystając ze składni syntax=c (poprawiłem)...

A ja muszę wysłać pomiar z DS18B20 - 16bit'owy a przekazać mogę tylko wartość do wysłania 8 bitową. Dlaczego tak jest skoro pakiet może być maksymalnie 32bajtowy - a implementacja funkcji ogranicza to do 8 bitów?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sty 2013, o 18:06 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Z tego co widzę nie takich ograniczeń co do ilości bajtów (maksymalnie 255), a to że dane muszą być zorganizowane w tablicę elementów 8-bitowych nie powoduje żadnego problemu. Możesz to zrobić np. tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2013, o 21:45 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Wielkie dzięki za odpowiedź, tak też zrobiłem. Teraz mam pytanie odnośnie zmniejszenia poboru prądu mikrokontrolera. Czy muszę wyłączyć ręcznie po przez ustawienie odpowiednich bitów ADC i Analog Comparator czy są one przy inicjalizacji wyłączone?
ObrazekObrazek

Chciałem też wyłączyć BOD ale dosyć magicznie brzmi ten opis:
Obrazek

Czy warto się tym zajmować aby zmniejszyć pobór prądu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2013, o 15:32 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Nie patrzysz na te rejestry co potrzeba (masz procesor atmega88PA). Wszystko jest w rejestrze PRR. Możesz też posługiwać się funkcjami z nagłówka <avr/power.h> i zrobić tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Bod jest od nowości wyłączony chyba ze ustawisz fusebity. Wówczas zanim uśpisz procesor wyłączasz BOD tą sekwencją.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2013, o 16:37 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Zastosowałem powyższe wskazówki. Mam kolejną wątpliwość odnośnie mojego kodu. Proszę o sprawdzenie poprawności implementacji przerwania od Timera2 w trybie CTC. Przypominam że procek to Atmega88PA
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pytania:
- Czy mogę sobie w funkcji przerwania zwiększać flagę tak aby opóźnić czas wysyłania pakietów - bo jedyne co udało się ustawić z timera 8-bitowego to częstotliwość ok 2Hz. Czy mogę w taki sposób to spowolnić?
- gdy wysyłam pakiet(sendPayload(TabTemp, 2, 1);) to czy muszę odzytać stan jakiejś flagi aby sprawdzić czy jest już wysłane Czy mogę odrazu uśpić układ RFM bez sprawdzania?

Z góry dziękuję za pomoc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2013, o 21:15 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Za dużo modyfikatora volatile i w tym przypadku nie jest on potrzebny. volatile używa się do zmiennych, które zmieniają się w przerwaniu, a są odczytywane w pętli głównej programu. Co do zwiększania zmiennej w przerwaniu to oczywiście tak się robi.
Uwagi:
- linię Flaga_p=Flaga_p++; możesz zastąpić Flaga_p++;
- odczyt temperatury (konwersja) trwa stosunkowo długo i nie powinno być to robione w funkcji obsługi przerwania
- podciągnij pozostałe wejścia uP do plusa (to oszczędza energię)
- jeśli chodzi o pomijanie wysyłania przy stabilnej temperaturze to należy wziąć pod uwagę gdzie to będzie pracować. Jak np. ma monitorować chłodnie to może nie każdy ale jakiś pomiar należy wysłać, bo jak bateria się wyczerpie to też ie dostaniesz pomiaru. Z drugiej strony sprawdź czy ten odczyt przypadkiem nie zmienia się na ostatnim bicie (jak ostatnia cyfra na woltomierzu). Może jakaś zakres zmian by się przydał.

Zrób według takiego szablonu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2013, o 12:45 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Zastosowałem cenne wskazówki, ale mam jedną wątpliwość. Definiujesz zmienną int_counter w funkcji obsługi przerwania, czy nie będzie ona za każdym razem inicjalizowana 0 i nigdy licznik się nie zwiększy? Czy definicja ta nie powinna być na zewnątrz?

Dodatkowo zastoswałem funkcję usypiające procesor - czy w dobrym miejscu ich używam?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 9 minutach ]

Mam jeszcze pytanie odnośnie pomiaru temperatury przez DS18B20. Trochę nie rozumiem tego datasheet'a. Czy temperatura jest przechowywana w formacie U2? - bo tak z obliczeń mi wychodzi, a nie wiem po co są te 's' napisane w rejestrze.
Tak mam świadomość że muszę poprawić sposób sprawdzania czy pomiary są różne i dostosować częstość ich wysyłania ale to późńiej.
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2013, o 13:20 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Definicja static uint8_t int_counter = 0; wewnątrz funkcji (main, funkcji obsługi przerwania, innej funkcji) z modyfikatorem static powoduje, że taka zmienna lokalna istnieje po wyjściu z funkcji oraz jest ona inicjowana tylko raz (można powiedzieć, że jest to jak gdyby zmienna globalna, ale widziana tylko przez tą funkcją). Dlatego tą definicję przenieś z powrotem do ISR i sprawdź, że działa dokładnie tak samo.

static w odniesieniu do zmiennych globalnych, czyli zdefiniowanych poza funkcjami sprawia, że nie są one widoczne w innych plikach .c.

Zmienne globalne używa się wtedy, gdy zmienna będzie wykorzystywana przez wiele funkcji, czyli jest to zmienna wspólna. W twoim programie TTemp i TabTemp[2] możesz zdeklarować w funkcji main i będzie bardziej profesjonalnie.

Usypianie dobrze masz zrobione. Temperatura jest w formacie U2, a jest tyle tych s, bo pomiar ma 12-bitów.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2013, o 11:12 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

OK, tak zrobię. Przepraszam że nękam was tymi pytaniami ale teraz zastanawiam się nad adresowaniem i identyfikacją modułów radiowych. Z tego co wyczytałem z noty RFM70:
"The PRX device can open up to six data pipes to support up to six PTX devices with unique addresses."
Rozumiem że te 6 urządzeń może śmigać tylko i wyłącznie po 1 na 1 data pipes? I żeby wprowadzić adresowanie muszę stosowa data pipdes?
Czy mogę to jakoś zrobić w jednym kanale danych? Ale wtedy jak odczytywać adresy bo nie mam żadnej takiej funkcji w bibliotece RFM70 którą posiadam.
Znalazłem jeszcze taką informację :
"The RX FIFO in PRX may contain payload from up to three different PTX devices."
Ale kolejke FIFO trzyma tylko payload a co z resztą pakietu, gdzie adresy?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2013, o 19:54 
Offline
Nowy

Dołączył(a): 07 paź 2012
Posty: 20
Pomógł: 0

Możesz np. wprowadzić własne adresowanie.
Pytanko do Ciebie jakie uzyskujesz zasięgi na tym RFM73 oraz w jakim trybie działasz tzn. jaki baudrate?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2013, o 20:54 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Wprowadzić własne adresowanie? Ale jak je stosować? Wysyłać jako payload?
A o zasięgu jeszcze nic nie mogę powiedzieć bo powstaje dopiero prototyp. I pracuję na RFM70.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2013, o 22:56 
Offline
Nowy

Dołączył(a): 07 paź 2012
Posty: 20
Pomógł: 0

No taką ramkę w ramcę, lub stosować te pipy i się przełączać na rózne.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2013, o 11:38 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Ma ktoś jeszcze jakieś pomysły jak sprawę adresowania dobrze zrobić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2013, o 15:09 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Wykorzystaj adres układu 1-Wire i wysyłaj dodatkowe 8-bajtów (możesz też wysyłać tylko 6, bo dwa pozostałe to identyfikator rodziny i CRC). Na pewno w bibliotece do 1-Wire jest stosowna funkcja. Jeśli chodzi o to, żeby np. jedna sieć nie kłóciła się z drugą (na przykład sąsiad ma taki sam system i nie chcemy, aby nasz master obrabiał/wyświetlał temperaturę z jego apartamentu) to należy wprowadzić rejestrowanie czujników (mam na myśli całe urządzenie). Może to być zrobione jak w bezprzewodowych padach do konsol, czyli master i czujnik mają przyciski, które naciskamy w odstępie kilku sekund, aby master wiedział, że akurat wysyłany jest adres nowego czujnika, a nie jakaś temperatura to ramka powinna się nieco różnić lub bajty temperatury składać się z sekwencji 1010 1010 1010 1010 co jest niemożliwe.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2013, o 13:11 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Dzięki z wszystkie sugestie. Zrobiłem taką ramkę w ramce, czyli dodałem sobie jeden bajt adresusący układy do payload'u nie bawiąc się w przesyłanie 6 bajtów z DS'a. Napotkałem na kolejny problem przy próbie zaprogramowania układu. Jak wiecie układ Master wyposażony jest w uC FT232RL za pomocą którego ma się odbywać komunikacja przez USB(RS232) i programowanie Atmeg na pokładach. Podłączyłem linie następująco:CTS->MISO; DSR->SCK; DCD->MOSI; RI->RST i przy próbie programowania z Eclipsa otrzymuję błąd(załącznik)
Obrazek
Co zrobiłem:
- zainstalowałem sterowniki do FTDI i układ jest wykrywany w programie ATBManager
- W programie ATBmanager w zakładce Eclipse skonfigurowałem workspace, w Eclipsie jest wybrany programator FT232R
- Nie mam pełnej wersji MKavralculator więc nie mogę programować moich procesorów, lecz jak zrobię sprawdź podłączony AVR to wykrywa ATmega88P.

Jak ruszyć z programowaniem przez ISP? Czy układ FT232 musi być jeszcze jakoś specjalnie skonfigurowany? zaprogramowany? Tutaj jest coś wgrywane ale nie wiem dlaczego? http://ep.com.pl/files/2932.pdf. Do czego jest Bit Bang mode - czy muszę to zastosować aby móc programować?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2013, o 11:18 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Skoro mówisz, że w MKAvrCalculator działa wykrywanie procesora i skonfigurowałeś Eclipse do pracy z FT232R to spróbuj tylko odczytać sygnaturę w Eclipse. Tam gdzie wybierasz procesor (Project->Propreties->AVR->Target Hardware) wciśnij przycisk Load form MCU i nawet jakbyś miał ustawiony inny procesor to plugin po otrzymaniu sygnatury z AVRdude ustawi poprawny.

Jeśli chodzi o konfigurację FT232R to możesz ją przeprowadzić z poziomu ATBManager, ale ta konfiguracja dotyczy wyjść CBUS0...4 np. LED, ustawienia wyjścia jako generator TTL. W dokumentacji do której się odnosisz FT232R pracuje tylko jak przejściówka USB-RS232_TTL.

Bit Bang Mode jest właśnie używany jak korzystasz z FT232R. Używa on innego AVRdude niż inne programatory.

PS.
Zajrzałem na schemat mastera i masz źle połączone linie RxD i TxD. To jest RS232/UART i należy skrzyżować (wyjście jednego układu to wejścia drugiego)

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2013, o 13:25 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Na szczęśie ten błąd(piny TX RX) znalazłem w fazie projektowej i jest poprawiony.
A o to co dostaje z Eclipsa:Obrazek

Mam alternatywne wyjścia ISP z układu wyprowadzone ale programator mam stary STK200/300 na gniazdo LPT którego nie posiadam w PC więc nie mogę sprawdzić.
I teraz nie wiem czy problem leży po stronie układu i jest natury elektornicznej? Czy może po stronie Eclipsa wraz z tym toolchainem Atmela? Czy może należy coś z układem FT232 jeszcze programowo zrobić aby była możliwość programowania?

A w programie MkAvrCalulator wykrywa niby procesor - ale programator ATB-FT232 widnieje napis brak, nie wiem czy to jest problem?

Robiłem kolejne próby na układach Slave i gdy je podłączam pod Master otrzymuje taki komunikat z programu MkAvrCalulator i nie wykrywa uC.
Obrazek
Mimo że na Slave'ie nie mam przełączników układ RFM sprawdzałem pin CSN jest w stanie wysokim więc nie może powodować problemów(2,8V). Dodatkowo podciągnąłem rezystorem 10k do VCC ale nic nie zmieniło



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2013, o 19:42 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Na zestawie ATB jest tak, że jak wtyczka USB wyjęta to ATB-FT232R=brak i wtedy jak dam sprawdź podłączony AVR to mam:
Kod:
avrdude.exe: ft0 open failed

Jak jest podłączony do USB to jest ATB-FT232R= COMx, a nie podłączony do procesora to mam:
Kod:
avrdude.exe: BitBang OK
avrdude.exe: pin assign miso 3 sck 5 mosi 6 reset 7
avrdude.exe: drain OK

 ft245r:  bitclk 4800 -> ft baud 2400
avrdude.exe: ft245r_program_enable: failed
avrdude.exe: initialization failed, rc=-1
avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude.exe: Device signature = 0xffffff
avrdude.exe: Yikes!  Invalid device signature.
avrdude.exe: Expected signature for ATMEGA8 is 1E 93 07

Radze sprawdić czy nie ma zwarć albo przerwy pomiędzy FT232R, a resztą.

Jak chcesz mieć wykryty port COM przez MkAVRCalculator to uruchom http://www.ftdichip.com/Support/Utilities.htm#FT_Prog i wybierz Device Scan and Parse. Wejdź w USB String Descriptors zmień FTDI na ATNEL w 2 miejscach. Wybierz Devices->Program. Zamknij program. Wyjmij wtyczkę USB i podłącz z powrotem.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2013, o 20:50 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Cały dzień walczę z tymi problemami. Jeden błąd wyeliminowałem tzn. w schemacie nie wiem dlaczego mam wszystkie piny RFM70 w złej kolejności i przez to musiałem układ przelutować dogóry nogami. Teraz gdy podłącze Slave pod Master to MkAVRCalculator wykrywa procki poprawnie.
Tylko ciągle z tym Eclipse coś jest nie tak, nie może się dogadać z AVRDUDE. Czy to może być wina tych plików konfiguracyjnych do workspace?Wersja Eclipse(Version: Indigo Service Release 2
Build id: 20120216-1857) A gdy ten workspae skonfiguruje to i tak toolchain atmela się przełącza na winavr. Znacie może jeszcze jakiś inny sposób zaprogramowania przez FT232 nie korzystając z Eclipsa i MkAVRCalculator?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2013, o 21:25 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Zawsze możesz używać avrdude z linii poleceń. Uruchom MKAvrCalculator i pojawi się folder C:\tmp_mkavrcalc\atb_ft232_isp\
Tam skopiuj swój plik hex. Kliknij Start->Uruchom... wklep cmd i wklej poniższą linię:
Kod:
C:\tmp_mkavrcalc\atb_ft232_isp\avrdude -p atmega88p -c ATB-FT232R -P ft0 -V  -U flash:w:"C:\tmp_mkavrcalc\atb_ft232_isp\nazwa_pliku.hex":i

Samo sprawdzenie procesora to:
Kod:
C:\tmp_mkavrcalc\atb_ft232_isp\avrdude -p atmega88p -c ATB-FT232R -P ft0

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2013, o 21:44 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Niestety! Nadal nie mogę zaprogramować:
Obrazek
Dlaczego program MkARVCalculator wykrywa Sygnaturę procesora , a powyższe instrukcje nie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2013, o 22:09 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Dodaj parametr
Kod:
-B 4800

Cała linia:
Kod:
C:\tmp_mkavrcalc\atb_ft232_isp\avrdude -p atmega88p -c ATB-FT232R -P ft0 -B 4800


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2013, o 22:38 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Coś ruszyło :)
Wielkie dzięki za pomoc!
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2013, o 12:41 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

To programowanie można przyspieszyć. W tym celu musisz przestawić fuse CKDIV8:
Kod:
C:\tmp_mkavrcalc\atb_ft232_isp\avrdude -p atmega88p -c ATB-FT232R -P ft0 -B 4800 -U lfuse:w:0xE2:m

i wtedy programujesz bez -B 4800
Mikrokontroler ATMEGA88PA przy napięciu 2,7V może być taktowany z maksymalną częstotliwością 10MHz, a przy 1,8V maksymalnie 4MHz. Należy wziąć to pod uwagę.
Częstotliwość można zmieniać programowo za pomocą rejestru CLKPR. Jak fusebit CKDIV8 jest zaprogramowany to procesor startuje z taktowaniem 1MHz, ale można to przestawić na większą częstotliwość lub mniejszą. Jak nie jest zaprogramowany to startuje z taktowaniem 8MHz co również można sobie zmienić. Przykładowo jak czekasz na coś dłuższą chwilę to możesz zmniejszyć taktowanie nawet do 8MHz/256. Wtedy wszystkie _delay_ms(liczba_ms); nie będą już wynosić liczba_ms tylko liczba_ms*256, bo są one obliczane dla częstotliwości głównej zdeklarowanej w ustawieniach projektu. Oczywiście najoszczędniej czekać w trybie PowerDown z watchdogiem ustawionym na generowanie przerwania.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2013, o 18:12 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Narazie tego nie będe zmieniał. Teraz mam problem z UART'em
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Mam standardową inicjalizację. Tryb wybrałem synchroniczny. W nocie katalogowej przy doborze takich prędkości(8MHz i BR:9600) stopa błędu jest na poziomie 0,2%. A mimo to w terminalu Termite 2.9 otrzymuje takie cos [00][00][00][00][00]... mimo że wysyłam literkę A. Próbowałem też w iteracji wysyłać liczby ale i tak są 0. W Eclipsie mam ustawione 8MHz ale nie wiem czy żeczywiście procesor pracuje z taką prędkością? Sprawdziłem jeszcze raz połączenia i mam na krzyż TX<->RX. Zastanawia mnie ten wzór w nocie gdzie wartość rejestru UBRRn wylicza się fosc/(2*Baud)-1. Mi z tego wychodzi 415 a w tabeli przykładowych wartości jest wartość 41.Co może być problemem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2013, o 18:30 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Przecież synchroniczny wymaga dodatkowej linii do taktowania. Coś pomieszałeś. Wybierz tryb asynchroniczny. Twoje taktowanie wynosi 1MHz (standardowo prosto z fabryki)

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 16:33 
Offline
Użytkownik

Dołączył(a): 01 lis 2012
Posty: 42
Pomógł: 0

Jakoś udało mi się ruszyć z USART'em. Teraz kombinuje jak dobrze przekazywać tablicę znaków do wysłania. Najpierw stringi wrzucam do tablicy wynikowej funkcją: int sprintf ( char * str, const char * format, ... ); A później tablicę Wynik wysyłam kazdy znak osobno przez uart. Znacie jakieś lepsze sposoby dodawania stringów do tablicy znaków, bo ta funkcja dodaje od końca tablicy.
Tablice czyszcze też w pętli nadpisując zerami. Czy jest jakiś lepszy sposób?
A jeszcze odnośnie funkcji. Gdy zbiór instrukcji wysyłających dane przez uart wrzucam do swojej funkcji to funkcja main jak by na jej zakończenie nie czeka i ją przerywa w trakcie przez co otrzymuje pierwsze literki. Dlaczego?
Tak wygląda moja funkcja wysyłająca:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

muślałem że jest winny for i go zmieniłem, nie pomogło, dodałem też zwracanie wartości - i też nic



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 20:28 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

W C łańcuchy znaków kończą się 0 np.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to w pamięci:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nie musisz znać rozmiaru tablicy tylko po prostu sprawdzasz while(*tab)

sizeof(Tab) to rozmiar wskaźnika (=2), a nie tablicy Tab. Do tego co tam chcesz zrobić jest funkcja strlen opisana tu: http://nongnu.org/avr-libc/user-manual/ ... tring.html

Nazwa tablicy to wskaźnik(adres) na pierwszy element i jak przekażesz go do funkcji to możesz u siebie pisać USART_Transmit(*Tab++);

Opóźnienie nie jest potrzebne (chyba, że komunikujesz się z modułem bluetooth)

Zobacz jak to było zrobione w bibliotece MKUART: http://www.atnel.pl/uaktualnienia-programow-do-dvd.html


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



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: 108 ]  Przejdź na stronę Poprzednia strona  1, 2, 3, 4  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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