From 5d1a70be5063f3e49c7f3b8c2c5eb0a7e01898b2 Mon Sep 17 00:00:00 2001 From: "arnaud.houdelette" Date: Mon, 9 Sep 2019 17:14:13 +0200 Subject: [PATCH] Fait fonctionner sur ardu micro --- Makefile | 11 ++++++----- i2cmaster.S | 12 ++++++++++++ lcd.c | 1 + main.c | 41 +++++++++++++++++++++++++++-------------- rf24.c | 10 ++++++++-- rf24.h | 14 +++++++------- spi.c | 4 ++-- spi.h | 12 ++++++++++++ 8 files changed, 75 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index 23975b9..06be166 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,8 @@ # $Id$ #Bootloader Port -PORT = /dev/serial/by-id/usb-Arduino__www.arduino.cc__Arduino_Mega_2560_6493534363335111A032-if00 +#PORT = /dev/serial/by-id/usb-Arduino__www.arduino.cc__Arduino_Mega_2560_6493534363335111A032-if00 +PORT = /dev/ttyACM0 # /dev/serial/by-id/usb-Arduino_LLC_Arduino_Micro-if00 #Device Port (for autoreset) RESETPORT = /dev/ttyU0 @@ -57,10 +58,10 @@ TARGET = pyrorf SRC = main.c lcd.c spi.c rf24.c CXXSRC = ASRC = i2cmaster.S -MCU = atmega2560 +MCU = atmega32u4 F_CPU = 16000000UL FORMAT = ihex -UPLOAD_RATE = 20000 +UPLOAD_RATE = 57600 # Name of this Makefile (used for "make depend"). MAKEFILE = Makefile @@ -98,10 +99,10 @@ LDFLAGS = -lm -Wl,--gc-sections # Programming support using avrdude. Settings and variables. -AVRDUDE_PROGRAMMER = stk500 +AVRDUDE_PROGRAMMER = avr109 AVRDUDE_PORT = $(PORT) AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex:i -AVRDUDE_FLAGS = -F -p m2560 -P$(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -b $(UPLOAD_RATE) +AVRDUDE_FLAGS = -D -F -p m32u4 -P$(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -b $(UPLOAD_RATE) # Program settings CC = avr-gcc diff --git a/i2cmaster.S b/i2cmaster.S index 9f509fc..8f2dff7 100644 --- a/i2cmaster.S +++ b/i2cmaster.S @@ -38,11 +38,23 @@ ;******----- Adapt these SCA and SCL port and pin definition to your target !! ; +#if defined (__AVR_ATmega32U4__) + +#define SDA 7 // SDA Port D, Pin 1 +#define SCL 6 // SCL Port D, Pin 0 +#define SDA_PORT PORTB // SDA Port D +#define SCL_PORT PORTB // SCL Port D + + +#else + #define SDA 1 // SDA Port D, Pin 1 #define SCL 0 // SCL Port D, Pin 0 #define SDA_PORT PORTD // SDA Port D #define SCL_PORT PORTD // SCL Port D +#endif + ;******---------------------------------------------------------------------- diff --git a/lcd.c b/lcd.c index b88a446..6cf973e 100644 --- a/lcd.c +++ b/lcd.c @@ -32,6 +32,7 @@ void i2csend(uint8_t data){ void pulseEnable (uint8_t data) { i2csend (data | _En); // En HIGH + i2csend (data); // En LOW } diff --git a/main.c b/main.c index d3de801..c26dc23 100644 --- a/main.c +++ b/main.c @@ -19,7 +19,7 @@ int main (void); void setup (void); void loop (void); void lcdprint( char* ptr); - +void debughex (uint8_t* ptr,uint8_t len); int main(void) { @@ -30,32 +30,45 @@ int main(void) void setup(void) { +#if defined(USBCON) + USBCON=0; +#endif + lcd_init(20,4); - lcd_backlight(1); + lcd_backlight(0); lcd_clear(); lcd_home(); + lcd_display(); lcdprint("Pyro RF ! "); - - spi_init_master(); - - rf24_init(); - - char st = rf24_read_reg(CONFIG); - debughex(&st,1); -#if defined(__AVR_ATmega32A__) + _delay_ms(200); + + spi_init_master(); + _delay_ms(200); + + rf24_setup(); + +// rf24_init(); + //char st = rf24_read_reg(STATUS); + rf24_update_fifo_status(); + debughex(&rf24_status,1); + + + + while(1); +#if defined(TIMSK1) // setup Timer1 TCCR1A = 0; TCNT1=0; - OCR1A = 2000; - TIMSK = _BV(OCIE1A); + OCR1A = 10000; + TIMSK1 = _BV(OCIE1A); TCCR1B = _BV(WGM12)|_BV(CS11); #elif defined(__AVR_ATmega2560__) // setup Timer1 TCCR1A = 0; TCNT1=0; OCR1A = 10000; - TIMSK1 = _BV(OCIE1A); + TIMSK = _BV(OCIE1A); TCCR1B = _BV(WGM12)|_BV(CS11); #endif @@ -90,7 +103,7 @@ void lcdprint( char* ptr) } -void debughex (char* ptr,uint8_t len) { +void debughex (uint8_t* ptr,uint8_t len) { while (len--) { uint8_t c = *(ptr++); uint8_t ch= c>>4; diff --git a/rf24.c b/rf24.c index 984e4d2..1200f38 100644 --- a/rf24.c +++ b/rf24.c @@ -24,6 +24,7 @@ void inline rf24_ceHi(){ void inline rf24_ceLow(){ CE_PIN_PORT &= ~_BV(CE_PIN_BIT); + } void inline rf24_csnHi(){ @@ -66,11 +67,15 @@ uint8_t rf24_read_reg(const uint8_t reg) return ret; } + + void rf24_update_fifo_status() { rf24_csnLow(); + _delay_ms(1); rf24_status = spi_transfer(FIFO_STATUS); rf24_fifo = spi_transfer(0); + _delay_ms(1); rf24_csnHi(); } @@ -78,8 +83,9 @@ void rf24_setup() { CE_PIN_DDR |= _BV(CE_PIN_BIT); CSN_PIN_DDR |= _BV(CSN_PIN_BIT); - CE_PIN_PORT &= ~_BV(CE_PIN_BIT); - CSN_PIN_PORT |= _BV(CSN_PIN_BIT); + rf24_ceLow(); + rf24_csnHi(); + } void rf24_init() diff --git a/rf24.h b/rf24.h index 21f67c6..74e7e86 100644 --- a/rf24.h +++ b/rf24.h @@ -13,7 +13,7 @@ void rf24_update_fifo_status(); extern uint8_t rf24_status; extern uint8_t rf24_fifo; - +void rf24_setup(); void rf24_init(); /* @@ -37,13 +37,13 @@ int rf24_waitforTX(); #elif defined(__AVR_ATmega32U4__) -#define CE_PIN_PORT PORTD -#define CE_PIN_DDR DDRD -#define CE_PIN_BIT PD4 +#define CE_PIN_PORT PORTB +#define CE_PIN_DDR DDRB +#define CE_PIN_BIT PB4 -#define CSN_PIN_PORT PORTC -#define CSN_PIN_DDR DDRC -#define CSN_PIN_BIT PC6 +#define CSN_PIN_PORT PORTB +#define CSN_PIN_DDR DDRB +#define CSN_PIN_BIT PB5 #elif defined(__AVR_ATmega32A__) diff --git a/spi.c b/spi.c index efb5971..bf3092f 100644 --- a/spi.c +++ b/spi.c @@ -5,9 +5,9 @@ void spi_init_master() { - SPI_PORT |= _BV(SCK_PIN); + SPI_PORT |= _BV(SCK_PIN)| _BV(SS_PIN); SPI_DDR |= _BV(MOSI_PIN) | _BV(SCK_PIN) | _BV(SS_PIN); - SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPR1)| _BV(SPR0); + SPCR = _BV(SPE) | _BV(MSTR) ; } diff --git a/spi.h b/spi.h index 10325b4..f3222ba 100644 --- a/spi.h +++ b/spi.h @@ -22,6 +22,18 @@ extern "C"{ #define MOSI_PIN PB2 #define MISO_PIN PB3 +#elif defined (__AVR_ATmega32U4__) + +#define SPI_PORT PORTB +#define SPI_DDR DDRB + + +#define SS_PIN PB0 +#define SCK_PIN PB1 +#define MOSI_PIN PB2 +#define MISO_PIN PB3 + + #endif