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



Teraz jest 5 lip 2026, o 14:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 32 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 18 wrz 2012, o 13:37 

Pomógł: 0

Mam jak zwykle zresztą pytanie ;). Zabieram się w końcu za automatyzację mojego zasilacza, posiadam przetworniki DAC, 14bitowe, które mają wewnętrzny podział na 8 i 6 bitów, czyli najpierw rzucamy na szynę 8 młodszych, potem 6 starszych itp.

W jaki sposób sobie poradzić z tym programowo (Nie chodzi mi o gotowy program ;)). W jaki sposób w C rozdzielić np. daną dwu-bajtową (czyli 16bit) na dwie porcje. Podobnie jest oczywiście z DAC 13bit i 12bit. Nie wiem jeszcze z którego będę korzystał. Bo procedury sterowania i tak muszę do każdego napisać od zera.

W jaki sposób podzielić np 16bitową daną (bo na takich trzeba operować) na młodszy i starszy bajt wysyłany na DAC. Na piechotę? za pomocą operacji bitowych?. Jeżeli użyję nowszych przetworników po SPI to tam problem nie istnieje bo i tak dane chodzą po ramkach, więc trzeba je inaczej interpretować. W przypadku sterowania równoległego muszę jakoś w programie rozbić daną 16bitową na dwie 8bitowe.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 13:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

użyj przesunieć bitowych dla MSB, natomiast dla LSB trzeba maskować bity



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 13:45 

Pomógł: 0

Nie wiem czy ogarnę tą odpowiedź swoim ciasnym umysłem. Tak też myślałem, że da się w jakiś sposób na piechotę za pomocą przesunięć, ale liczyłem na jakąś prostszą metodę ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 13:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

LSB = 16bit & 0xFF
MSB = 16bit >> 8


Autor postu otrzymał pochwałę


Ostatnio edytowano 18 wrz 2012, o 13:47 przez Malutki_27, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 13:47 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

No i Malutki mnie ubiegł. Chyba mu ktoś tego kunia batem pogonił ;)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 13:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

;) tylko jakoś liczenie mi nie bardzo idzie ....... bo chyba ze trzy razy poprawiałem post.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 13:49 
Offline
Moderator
Avatar użytkownika

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

Nawet nie trzeba nic maskować ;)

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


;) ot wsio


Autor postu otrzymał pochwałę

_________________
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: 18 wrz 2012, o 13:50 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Malutki_27 napisał(a):
;) tylko jakoś liczenie mi nie bardzo idzie ....... bo chyba ze trzy razy poprawiałem post.

no właśnie miałem napisać, że cosik mi nie pasi :lol: a tu już poprawiłeś

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 13:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Bo to wszystko przez moją chabetę, ja chcę w prawo a ona lezie w lewo :lol:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 13:59 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

i na dodatek jęzor Ci pokazuje :lol:

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 14:23 

Pomógł: 0

Kurcze ja to jednak ciemny jestem jak tabaka w rogu......


Co prawda chodziło mi o "w drugą stronę" czyli DAC, ale zasada zostaje ta sama :).

Nie odpowiada mi dokładność przetworników w AVR, za równo rozdzielczość mają za małą, jak i liniowość kiepską. Muszę się posiłkować zewnętrznymi.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 14:28 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Pewnie wszystko zależy do czego.
Chyba można by to trochę poprawić dając zewn. napięcie odniesienia :?:

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 14:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

rezasurmar napisał(a):
Kurcze ja to jednak ciemny jestem jak tabaka w rogu......


Co prawda chodziło mi o "w drugą stronę" czyli DAC, ale zasada zostaje ta sama :).

Nie odpowiada mi dokładność przetworników w AVR, za równo rozdzielczość mają za małą, jak i liniowość kiepską. Muszę się posiłkować zewnętrznymi.



Jakoś znowu pokrętnie piszesz :P

zdecyduj się czy gadamy o ADC czy jednak o DAC :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 14:38 

Pomógł: 0

Niestety rzeczywista dokładność przetworników AVRów to w porywach 8-9bitów, za duża nieliniowość i dokładność. Znowu DACów na PWM to jakoś w zastosowaniach precyzyjnych nie widzę. Mój DAC to MX7537, ewentualnie nowsze z wyjściem prądowym. Dzięki temu uzyskuję wysoką dokładność i stabilność zadanego napięcia, na czym mi bardzo zależy.

Źródła napięcia odniesienia "załatwiłem" o dokładności 0.02% i 1ppm ;). Szkoda było by psuć parametry kiepskimi przetwornikami na PWM, czy nawet w ATXmegach. Są fajne procki z dobrymi DAC i ADC ale z jądrem 8051 wiec odpadają.

O DAC, cały czas o DAC.

W ADC, nie ma problemu bo mam 16-24bitowe przetworniki ADC po SPI, więc już w samej obsłudze SPI wrzucane będą dane do odpowiednich zmiennych (uint16 albo 32). Jedynie miałem problem z MX7537 bo one są równoległe i stąd potrzeba rozdzielenia 16bitowej danej na dwie 8bitowe.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 15:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Aaaaa ok to juz się odnalazłem ;)

Hehehe no wiesz wszystko zależy jakiej dokładności oczekujesz ........, swoją drogą dla uproszczenia konstrukcji też poszedłem tą samą drogą ;) ( wyszło masło maślane )

I nie dlatego że DAC na PWM jest jakiś beee ale dlatego że rodzi to mniejsze problemy według mnie ( co może być powiązane z brakiem odpowiedniej wiedzy ;) )



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 16:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Może wskaźnik??

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 16:32 

Pomógł: 0

Ogólnie oczekuję sporej dokładności i stabilności w czasie. Zakładana rozdzielczość ustawiania napięcia to 5mV przy zakresie 30-50V. Mam taki kaprys ;). I przy rozdzielczości 14bit dało by się to już osiągnąć. Biorąc po uwagę iż użyję przetworników o błędzie 0.5% oraz źródła napięciowego o dokładności 0.02% i 1ppm. Powinno to dać dosyć precyzyjne pomiary.

Z mierzeniem też nie powinno być problemu, bo mam gotowe rozwiązania na CS5532, ewentualnie ADS1216 itp. Co prawda nie od strony programowej a hardwaru, ale w przypadku tak precyzyjnych pomiarów software jest sprawą drugorzędną.

PS. AVR niestety ma bardzo duże szumy, przez co przy mniejszych wartościach są spore przekłamania, można co prawda uśredniać wynik itp. ale pewność pomiaru w funkcji czasu nadal pozostaje na poziomie pojedynczych procentów, a ja chcę zejść przynajmniej do wartości 0,5% albo mniej.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 17:27 

Pomógł: 0

Fakt, daną wrzucać jako uint16, a pobierać jako wskaźnik raz do młodszego bajtu raz do starszego z zwiększeniem wskaźnika o jeden.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 19:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Hmmmm może za pomocą struktury?

------------------------ [ Dodano po: 1 minucie ]

Nie działa :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 20:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Hehehe struktura połączona z unią ............ za raz to przetestuje ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 20:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

No tak tylko już od dłuższego czasu klepie różnke kombinacje i kompilator daję mi cały czas "zakaz zatrzymywania" :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 20:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

A taki czerwony znaczek z białym krzyżykiem ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 21:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

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


a dalej już się używa tak :

MSB = rozbicie.MSB
LSB = rozbicie.LSB

Mam rację :?: ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2012, o 21:45 
Offline
Moderator
Avatar użytkownika

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

niestety Malutki_27 zarówno MSB i LSB będziesz miał równe i będzie to LSB z data :(

ale jak zrobisz tak:

union {
uint16_t data;
uint8_t tab[2];
} rozbicie;

to

MSB = .tab[0];
LSB = .tab[1];

to już będzie OK ;)

_________________
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: 18 wrz 2012, o 21:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

No własnie wiedziałem że w którymś kościele dzwonią .......... tylko nie zabardzo wiedeziałem gdzie ;)

jeszcze kombinowałem żeby do tego użyć strukturę zamiast tablicy jak w twoim przypadku ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2013, o 12:56 

Pomógł: 0

Z racji iż wróciłem do tematu DAC, dokładniej oprogramowania MX7537.

Wrzucam tu celem wysłuchania solidnej porcji krytyki ;) moją przymiarkę bibliotek do MX7537

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


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


Moje podstawowe pytanie, czy to zmierza w dobrym kierunku?

Wszelkie podobieństwa do bibliotek Mirka (hd44780) jak najbardziej zamierzone ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2013, o 13:24 
Offline
Moderator
Avatar użytkownika

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

Ja nie miałem czasu dokładnie przejrzeć PDF'a ale tak tylko kontrolnie zapytam czy aby na pewno przy takiej transmisji danych równoległych, wystawiamy dane na samym końcu ?

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


nie mówię, że to źle - bo nie wiem - ale jak potwierdzisz - to będzie pewne że masz OK ;)

_________________
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: 18 kwi 2013, o 13:30 

Pomógł: 0

Właśnie patrzę w dokumentację i coś mi śmierdzi ;).........jeszcze walczę. Dzięki za zwrócenie uwagi.

Po przemyśleniach doszedłem do błędnego wniosku ;), bo dalej mi coś się nie podoba, ale już chyba wiem gdzie leży problem
chwilowo wygląda to tak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zdaje mi się, że powinienem jednak najpierw poustawiać bity, a potem je naraz wywalać na szynę..........

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


Obrazek
Obrazek

Zastanawiam się, czy nie powinienem zrobić jak w funkcji static inline void lcd_sendHalf(uint8_t data); ??? w bibliotekach Mirka.
Czy może chwilowo nie bawić się w uniwersalność biblioteki? może lecieć na pałę ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2013, o 22:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sty 2013
Posty: 328
Lokalizacja: Rzgów k. Łodzi
Pomógł: 11

Ja to bym na pałę leciał. Jak będzie w ogóle działać to wtedy się porozdziela na biblioteki :smile:

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2013, o 23:19 
Offline
Moderator
Avatar użytkownika

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

rezasurmar -->

mów co chcesz ;) ale idę o zakład, że najbezpieczniej (zresztą zawsze przy tego typu transmisji równoległej), pierwsze co zrobić to wystawić dane na szynę równoległą, z czasówki widać, że podobnie wcześniej MUSI być wystawiony adres, więc ja od tego bym zaczynał ....

potem zwróć uwagę na czasy t5 i t6 ;) 0ns

ważny jest t7 (WR) oraz t8 (CLR) ale w przypadku AVRka popędzanego byle wolnym 8MHz to żaden z tych czasów nie ma znaczenia - nie musisz się martwić i w jednym cyklu możesz banglować tymi sygnałami. Ewentualnie przy 16MHz i więcej można byłoby próbować wstawiać jakiegoś NOP'a w czasie t7 czy t8, ale podejrzewam że obejdzie się i bez NOP'a

zwróć uwagę, że w tego typu czasówkach masz podane tak w ogóle minimalne czasy ;) a nie WYMAGANE czasy bo tu często bywają nieporozumienia.

zatem wystarczy jak mówiłem wystawić DANE i ADRES czy tam ADRES i DANE (obojętna kolejność) a potem przebanglować CS,UPD, WR, CLR i co ważne na zakończenie ustawić wszystkie w stan WYSOKI.

Tak samo ustawić te linie w stan wysoki przy jakiejś inicjalizacji biblioteki po ustawieniu kierunków

a potem każdy zapis nie musi się już zaczynać od ustawiania tych linii w stan wysoki - bo tylko będziesz marnował Flash i swój czas tzn czas procka ;) ...

i będzie śmigać - tak myślę - no ale przetestuj i zobacz ;)

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 32 ]  Przejdź na stronę 1, 2  Następna strona

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