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



Teraz jest 22 lut 2025, o 22:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 16 wrz 2016, o 08:16 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Witajcie.

Próbując odpalić po SPI Oleda na kontrolerze SSD1309 (Biblioteki u8glib_AVR) natknąłem się na taki problem.
#if defined(__AVR__)
Kod:
#if defined(__AVR__)
  /* select minimal prescaler (max system speed) */
  CLKPR = 0x80;
  CLKPR = 0x00;
#endif

Podłączone do ATB1.04 z Atmegą 32
Eclipse wyrzuca błąd że CLKPR nie jest zdefiniowane. No i w sumie ma rację bo
nie ma takiego rejestru dla Atmegi a jest dla Attiny ale z kolei zapis
CLKPR = 0x80; ustawia prescaler na 1
a zaraz potem
CLKPR = 0x00; wyłącza Prescaler.

zastanawia mnie zapis #if defined(__AVR__) - czy to oznacza że jeżeli jest dowolny AVR zdefiniowany to ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2016, o 10:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 gru 2014
Posty: 77
Lokalizacja: Gorlice
Pomógł: 5

Ja pomijam przy kompilacji to i problemie ( glcd + SPI + Atmega8 )
Choć może to nie jest dobre rozwiązanie ale działa w moim przypadku

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 wrz 2016, o 11:27 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

iwi napisał(a):
nie ma takiego rejestru dla Atmegi a jest dla Attiny

Nie ma znaczenia czy to ATmega czy ATtiny. Po prostu nowsze rdzenie (bodajże począwszy od avr5) to mają, np. ATmega644, ATmega328 itp.
Warunek powinien raczej wyglądać w stylu:
#if __AVR_ARCH__>=5

iwi napisał(a):
ale z kolei zapis
CLKPR = 0x80; ustawia prescaler na 1
a zaraz potem
CLKPR = 0x00; wyłącza Prescaler.


W linijce, gdzie jest "ustawia preskaler na 1", powinno być "zezwala na zmianę preskalera".
Gdyby zapis był taki:
CLKPR = (1<<CLKPCE);
sprawa byłaby bardziej oczywista. To jest jeden z podstawowych argumentów, aby stosować zapis z nazwami bitów, zamiast wartości heksadecymalnych.

PS. Zdaje się, że avr5 i avr6 mają preskaler zegara systemowego. avr 51 nie mają, więc warunek powinien wyglądać:
#if __AVR_ARCH__==5 || __AVR_ARCH__==6



Ostatnio edytowano 16 wrz 2016, o 11:43 przez andrews, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2016, o 11:35 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Chciałbym wspomnieć że to są biblioteki z u8glib, ja też wolę oznaczenie z nazwami rejestrów :)

Pominąłem żeby skompilować te wpisy, ale wyświetlacz nie ruszył.
Pewnie źle coś podłączyłem bo oznaczenia sa jakie są. Na moim wyświetlaczu
SCL - podłączam pod SCLK PC7
SDA - podłączam pod MOSI PC6
RES - Podłączam pod pin PC5
DC - podłączam pod pin PC4
CS - Podłączam pod pin PC3

a funkcję z u8glib mam taką

Kod:
//Software SPI:
// uint8_t u8g_InitSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset);
  uint8_t u8g_InitSPI(&u8g, &u8g_dev_ssd1309_128x64_sw_spi, PN(2,7), PN(2,6), PN(2,3), PN(2,4), PN(2,5));


ale od razu pytanie
czy zapis PN(2,7) można zastąpić (1 << PC7)



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

Dołączył(a): 01 gru 2014
Posty: 77
Lokalizacja: Gorlice
Pomógł: 5

Ja deklaruję funkcję bez uint8_t, może i u Ciebie tak będzie i zadziała :)
Używam biblioteki u8glib_avr_v1.18.1

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

a tu coś do wyjaśnienia nieco do biblioteki u8glib https://github.com/olikraus/u8glib/wiki/avr



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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