Dobra ... namówiliście mnie ... idę zobaczę co za babola strzeliłem ... zaraz napiszę co i jak
Edit: Eeeee.... jestem zbyt senny żeby szukać dalej błędu. Jutro zrobię od nowa przy płytce DDSa i oscyloskopie bo takie pisanie bez sprzętu to na nic jest. Dobranoc
1. W pliku nowy.c nie było kodu inicjalizującego SPI czyli funkcji
init_spi(); ... jakk mogliście tego nie zauważyć ?
Wpiszcie sobie to co jest na czerwono pomiedzę istniejące już linijki kodu - niebieskie
init_lcd();
init_spi();
init_DDS(4);
2. W pliku AD9951.c należy dodać dwa znaki
|
w funkcji
void init_spi()
{
DDRB
|= ( 1 << PB7 ) | ( 1 << PB6 ) | ( 1 << PB5 )
| (1<<PB4); // MOSI, SCK, MISO, SS
oraz w funkcji
init_DDS
{
DDR_DDS
|= (1<<DDS_UPDATE)|(1<<DDS_RESET);
dodatkowo (na zielono) ustawiam równnież wyjście SS, czyli PB4, jako wyjście bo inaczej nie chce nic działać... to dziwne że w żadnym opisie o tym nie było ?!
Po co są te znaczki (te na czerwono) ?? Po to :
- kod poniższy ustawia cały bajt rejestru od nowa ( kasuje bity które były wcześniej ustawione a teraz nie są )
[code]
DDR_DDS = (1<<DDS_UPDATE)|(1<<DDS_RESET);
lub
DDRB = ( 1 << PB7 ) | ( 1 << PB6 ) | ( 1 << PB5 ) | (1<<PB4);
[\code]
- często (teraz też) jest tak że nie chcemy zmieniać całego bajtu rejestru lecz tylko wybrane bity - i po to są te znaczki ( było o tym na wcześniejszych lekcjach ! ) ... dlatego nasz kod powinien wyglądać tak:[code]
DDR_DDS |= (1<<DDS_UPDATE)|(1<<DDS_RESET);
lub
DDRB |= ( 1 << PB7 ) | ( 1 << PB6 ) | ( 1 << PB5 ) | (1<<PB4);
[\code]
Kto nie rozumie niech prosi o wyjaśnienie, będę wyjaśniał.
Acha, i piszcie czy udało wam się uruchomić. Jak nie dacie rady wyślę gotowca, ale wolałbym żebyście się trochę pomęczyli i pogłówkowali