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



Teraz jest 14 lut 2025, o 16:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 16 sie 2013, o 13:55 
Offline
Nowy

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

Witajcie koledzy,

jestem początkującym "programistą" z jakimś tam doświadczeniem hardware'owym. Zrobiłem układ z ATmega128 (16MHz) z wyświetlaczem LCD TFT 5,7" i mam marzenie aby opanowując go nauczyć się programowania w C. Właśnie zainstalowałem Eclipse Indigo, programator USBASP, do którego podłączyłem moją płytkę i wygląda na to, że potrafię zaprogramować procesor bo na jego nóżce PC4 obserwuję przebieg. Spodziewałem się ciągu impulsów dodatnich o czasie trwania ok. 60ns powtarzanych co kilkaset ns. Jednak obserwuję odstęp między impulsami ok 2,1 ms.
Wiem, że popełniam jakiś fundamentalny błąd związany z wykonywaniem funkcji impuls, bo jeśli jej zawartość (linie 18 i 19 kodu) wstawię w miejsce jej wywołania (linia 11) to otrzymam żądany przebieg. Czy mógłby ktoś mi pomóc ?


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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sie 2013, o 14:43 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 57
Pomógł: 5

funkcja jest zadeklarowana jako void, a w jej ciele masz return; - więc tu masz na pewno błąd.

czas trwania twojego impulsu zależny jest tak na prawdę od taktowania procesora i ilości instrukcji składających się na wykonanie operacji PORTC = 0b00010000; dużo zależy tutaj od kompilatora i sposobu w jaki zamienia kod w C na język maszynowy.
ale zastanawia mnie również dlaczego kolejne skoki do twojej funkcji wykonują się co ~2ms.
Spróbuj dać jakieś staromodne _delay_us() i wtedy sprawdź czy czas między kolejnymi wywołaniami funkcji się zmienia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sie 2013, o 15:20 
Offline
Nowy

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

EUREKA! znalazłem odpowiedź na swoje pytanie - przyczyna leży gdzie indziej. ATmega128 ma fusebit M103C "ATmega103
Compatibility Mode", wystarczy go skasować i procesor zaczyna być posłuszny. Dzięki BARTB za dobre chęci.
Przy okazji Mirku wielkie dzięki za mk AVR Calculator !



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: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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