[atmega8] [c] [avrstudio] + przetwornik oborotowo kodowy

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
didymos
-
Posty: 1
Rejestracja: 07 wrz 2009, 21:05
Lokalizacja: Kalisz
Kontakt:

[atmega8] [c] [avrstudio] + przetwornik oborotowo kodowy

Post autor: didymos » 07 wrz 2009, 22:00

Chodzi mi o pomoc w jego napisaniu. Z programowania nie jestem najlepszy. Problem polega na:
Sczytaniu wartości z przetwornika (http://www.wobit.com.pl/download/pdf/pr ... /MAK50.pdf), konwersji z kodu Gray`a na kod binarny oraz przesłaniu za pomocą rs232 na PC. Wszystko to na przerwanaich.

Co do samego sczytania wartości to wiem,że przetwornik jest enkoderem 10-bitowym. Postanowiłem, że wykorzystam port C i D uC. Do portu C podłącze 6 przewodów (mam wszystkie 6 do dyspozycji), a do portu D 4. Mniej więcej wiem jak tego dokonać. Potrzebuje do tego zmiennej 10-bitowej (16 bitów wystarczy), by "upakować" 6 bit i 4 bit w int.

Kod: Zaznacz cały

cala_liczba = (bity_bardziej_znaczace<<4) | bity_mniej_znaczace;


Przesuwamy po prostu bity bardziej znaczące o 4 miejsca w lewo, a później dołączamy (operacja or na bitach) bity mniej znaczące. Wcześniej trzeba by skonwertować zmienną z bitami bardziej znaczącymi do long long int tak żeby po przesunięciu o 4 miejsca nie 'przekręciła' się.

W bardziej ogólnym przypadku gdy każdy z bitów jest w innej zmiennej można napisać:

Kod: Zaznacz cały

wynik=0; 

for (int i=0;i<ilosc_bitow;i++) { 

wynik=wynik<<1; 

wynik=wynik | tablica_bitow[i]; 

} 
Kolejno wiem, że mam dokonać konwersji z kodu Gray`a na binarny. Wiem jak tego doknać na kartce papieru, natomast gorzej zaimplementować to w programie. Do tego wszystkiego ma to być dokonane na przerwanaich,których zupełnie nie rozumiem. Prosze o pomoc. pozdrawiam

Edit: Proszę używać znacznika CODE. Ddevil
Ostatnio zmieniony 08 wrz 2009, 23:04 przez didymos, łącznie zmieniany 1 raz.

atelszewski
Użytkownik
Posty: 143
Rejestracja: 12 sie 2005, 9:36
Lokalizacja: Banie

Post autor: atelszewski » 08 wrz 2009, 10:08

Witam,

Osobiście urządzenie oparłbym na ATtiny2313 i wykorzystał 8 przerwań typu Pin Change i 2 zewnętrzne INTx, co w sumie dałoby możliwość badania wszystkich 10 linii enkodera. Wtedy, gdy wystąpi przerwanie z któregoś z tych źródeł, to w jego obsłudze odczytujesz stan pinów i masz wartość położenia enkodera. Ponieważ nie mam możliwości sprawdzenia, to nie wiem, czy to rozwiązanie będzie optymalne, ale wydaje mi się, że powinno dobrze działać.

Jeśli chodzi o programowanie AVR w C, obsługę przerwań i RS232, to poszukaj kursu C z EdW.

--
Pozdrawiam,
Andrzej Telszewski

ODPOWIEDZ