Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - nico

Pages: [1]
1
Hello,
I have the display quoted on the title, and I would like to use it with an Arduino Uno (with an ATMega328).

I wrote a test program to switch on the whole display during 3 seconds and switch it off during 3 other seconds.
However, it doesn't work, and I need your help to understand why.

Here my code :

/* Pins definition
 *  Pin Arduino - function - Pin Newhaven screen
 * P10 - SS (SPI Bus Master Slave select) chip select - P6
 * P11 - MOSI (SPI Bus Master Output/Slave Input) - P2
 * P12 - MISO - None
 * P13 - Serial Clock MOSI - P1
 *
 * P9 - Reset : Operation Active LOW Reset signal - P5
 * P8 - A0 - Register Select. 0: instruction; 1: data - P4
 *
 * 3.3V - power supply - P3
 * GND - ground - P10
 * 5V and resistor 1 kohm - backlight LED - P11
 */

#define DATAOUT 11//MOSI
#define DATAIN  12//MISO
#define SPICLOCK  13//sck
#define SLAVESELECT 10//ss
#define RESET 9
#define A0 8

uint8_t display_on = 0b10101111;
uint8_t display_all_points = 0b10100101;
uint8_t shutdown_all_points = 0b10100100;
uint8_t n;

/* ======================================= Functions ================================================*/

void spi_transfer(volatile uint8_t data,volatile bool instruc_or_data) // char = int_8
{
  if (instruc_or_data) // instruction 0, data 1
  { digitalWrite(A0,HIGH); } // write data
  else
  { digitalWrite(A0,LOW); } // write instruction

  digitalWrite(SLAVESELECT,LOW); //enable device
 

  // writing a byte to the SPI Data Register SPDR starts the SPI clock generator
  SPDR = data;                    // Start the transmission
  while (!(SPSR & (1<<SPIF)))     // Wait for the end of the transmission
  {
    //write the data
  };                   // return the received byte
 
  Serial.print("Tranfer done \n");
  delay(500);
  digitalWrite(SLAVESELECT,HIGH); //disable device
}
/* ======================================== SETUP ===================================================*/

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); //run the UART : serial monitor

  pinMode(DATAOUT, OUTPUT);
  pinMode(DATAIN, INPUT);
  pinMode(SPICLOCK,OUTPUT);
  pinMode(SLAVESELECT,OUTPUT);
 
  digitalWrite(SLAVESELECT,LOW); //enable device
  digitalWrite(RESET,LOW); // reset active
  delay(1000); //wait 1 second
  digitalWrite(RESET,HIGH); //reset inactive
  digitalWrite(SLAVESELECT,HIGH); //disable device
                                     
  // We want SPCR = 01010000
  //interrupt disabled,spi enabled,msb 1st,master,clk low when idle,
  //sample on leading edge of clk,system clock/4 rate (fastest)
  SPCR = (1<<SPE)|(1<<MSTR);

spi_transfer(display_on, 0);

 
}
/* ======================================= LOOP =====================================================*/

void loop() {
  // put your main code here, to run repeatedly:
  spi_transfer(display_all_points, 0);
  delay(3000);
  Serial.print("test \n");
  spi_transfer(shutdown_all_points, 0);
  delay(3000);
}


Thank you,
Nicolas

Pages: [1]