Метка: arduino

AVR упрощаем TWI (I2C)

Давно уже написал, а выложить все как-то влом было. Но если вдруг, кому потребуется, простенькая библиотечка для работы с Two-Wire Interface (TWI, он же I2C) на AVR вообще и ATMega328p (та самая, которая в arduino nano v3 стоит) в частности.

Пользоваться проще некуда, подглядеть в libtwi.h всегда можно.

Скачать на гитхабе github.com/bevice/libtwi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "main.h"
#include "libtwi.h"
#include <util/delay.h>
void setup() {
    twi_init();
    DDRB |= _BV(PB5); // включим PB5 на выход, на Arduino Nano там светодиодик
 
}
 
#define DATA_SIZE 10
static uint8_t data[DATA_SIZE] ={0};
 
void twi_cb(uint8_t status){
    if(status!= TWI_STATUS_ERROR) // если все прочиталось - перевернем светодиод
        DDRB ^= _BV(PB5);
}
 
int main() {
    setup();
 
    while (1) {
        // для 24CXX при записи передается адрес и следом данные.
        uint8_t buff[] = {0x10,1,2,3,4,5}; 
        // передаем buff в железку с адресом  0xA0, 
        // как закончим передавать - дергаем twi_cb
        twi_transmit_data(0xA0, sizeof(buff), buff, &twi_cb);
 
        _delay_ms(1000);
 
        // читаем  DATA_SIZE байт из железки 
        // с адресом 0xA0 начиная с регистра 0x10
        // как в буффер data, как дочитаем
        //  - попадем в коллбек twi_cb с соответствующим статусом
    twi_receive_data_adr8(0xA0, 0x10, DATA_SIZE, data, &twi_cb);
 
    _delay_ms(1000);
    }
}

AVR CMake

Clion & AVRВот уже несколько лет пользуюсь CMake-ом, чтобы собирать проекты под AVR. Сподвиг на этом конечно же вышедший осенью 2014 Jetbrains CLion, который как оказалось идеально подходит для написания кода под Atmel AVR. Короче, рекомендую.
Возможно, для корректной работы нужно будет установить переменную среды AVR_FIND_ROOT_PATH — на папку с avr (содержащую lib и include), а так же папка с avr-gcc, avr-g++, avr-objcopy, avr-size должны находиться в PATH. Ну или доработать напильником generic-gcc-avr.cmake

В общем, шаблон тут: https://github.com/bevice/avr_cmake_template
Читать далее