Kód: Vybrat vše
https://a.aliexpress.com/_mKDG11j
Kód: Vybrat vše
https://a.aliexpress.com/_mKDG11j
Kód: Vybrat vše
#define pin_CS 10
#define pin_MOSI 11
#define pin_MISO 12
#define pin_SCK 13
void setup(void)
{
Serial.begin(9600);
pinMode(pin_SCK,OUTPUT);
pinMode(pin_MOSI,OUTPUT);
pinMode(pin_MISO,INPUT);
pinMode(pin_CS,OUTPUT);
digitalWrite(pin_CS,HIGH);
digitalWrite(pin_MOSI,LOW);
delay(1000);
delay(100); // zapis WREN
digitalWrite(pin_CS,LOW);
delay(10);
posli_data(0x06); // WREN = Write Enable
delay(10);
digitalWrite(pin_CS,HIGH);
delay(200); // cteni STATUS registru
digitalWrite(pin_CS,LOW);
delay(10);
posli_data(0x05); // RDSR = Read Status Register
byte status_reg = posli_data(0); // jen 8x tiknuti hodinami
digitalWrite(pin_CS,HIGH);
Serial.println(status_reg);
delay(200); // zapis hodnoty
digitalWrite(pin_CS,LOW);
delay(10);
posli_data(0x02); // WRITE = zapis do RAM
posli_data(0); // Adresa MSB
posli_data(20); // Adresa LSB
posli_data(150); // data
digitalWrite(pin_CS,HIGH);
delay(200); // cteni hodnoty
digitalWrite(pin_CS,LOW);
delay(10);
posli_data(0x03); // READ = cteni RAM
posli_data(0); // Adresa MSB
posli_data(20); // Adresa LSB
byte dataread = posli_data(0); // jen 8x tiknuti hodinami pro precteni dat
digitalWrite(pin_CS,HIGH);
Serial.println(dataread);
}
void loop(void)
{
}
//--------------------------------------------
byte posli_data(byte vstupniBajt)
{
byte vystup = 0;
for (byte i=8; i > 0 ; i--) // prochazi se od nejvyssiho bitu k nejnizsimu
{
boolean databit = bitRead(vstupniBajt,i-1);
delay(1);
if (databit == false) digitalWrite(pin_MOSI,LOW); // MOSI se nastavi podle aktualniho databitu
else digitalWrite(pin_MOSI,HIGH);
delay(1);
digitalWrite(pin_SCK,HIGH); // jedno kladne tiknuti hodinami
delay(2);
if(digitalRead(pin_MISO) == HIGH) bitSet(vystup,i-1); // pri SCK v HIGH se testuje stav pinu MISO
digitalWrite(pin_SCK,LOW); // navrat hodin do LOW
delay(1);
}
return vystup;
}
Ty záznamy průběhů jsou nasnímané až u RAM - za tím převodníkem úrovní.
HOLD napojeny na Vcc je OK a vůbec se s ním nemusíš zabývat. Slouží k řešení prioritního konkurenčního přístupu k SPI.AstroMiK píše: ↑11 úno 2021, 07:59Ty záznamy průběhů jsou nasnímané až u RAM - za tím převodníkem úrovní.
Mám to na nepájivém poli, tak jsem myslel, že by to mohlo být nějaké rušení.
Ta hodnota je ale pokaždé stejná. I když zkouším několikrát zapsat číslo 150 tak vždycky dostanu 159.
Možná je problém už v tom, že paměť hlásí "BUSY" ve status registru.
Ještě si nejsem úplně jistý tím /HOLD pinem. Napojil jsem ho přímo na Vcc.
Těsně u paměti mám ještě mezi Vcc a GND vykrývací kondenzátor.
Jak jsem psal, ještě to o víkendu vyzkouším na STM32, jestli do toho nevnáší nějaké problémy ten převodník úrovní.
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti