по-моему в расширении файла. Среде arduino нужно, чтобы у основного файла библиотеки было расширение .cpp
А, ну и вместо uart_writebyte надо было uart_sendbyte, но это ты бы и сам нашел :-).
Вид для печати
по-моему в расширении файла. Среде arduino нужно, чтобы у основного файла библиотеки было расширение .cpp
А, ну и вместо uart_writebyte надо было uart_sendbyte, но это ты бы и сам нашел :-).
эта библиотека обладает таким свойством - у нее нет буфера. Если байт принялся, его можно считать. Но если во-время не считал, то следующий пропадет.
Передача тоже без буфера - если контроллер уже отправил предыдущий байт, то функция отправки завершится сразу. Если прошлый еще не отправился, функция будет ждать, пока не отправится прошлый байт и только потом завершится.
Я только хотел спросить про буфер :)
Данные все равно через буфер FTDI проходят, почему он потеряется?
P.S.
Посмотрел встроенную библитотеку Serial , они прерывание используют и буфер в оперативке контроллера
ftdi дергает ногой, mega аппаратно распознает эти данные. Но поскольку никакого контроля готовности приема мегой нет, ftdi тупо шлет данные, не дожидаясь, пока мега будет готова принимать данные.
Штатная библиотека вешается на прерывание, которое вызывается в момент прихода символа из uart, помещает этот байт в буфер.
В случае простого приложения, готового непрерывно пытаться читать данные из порта, получается выгоднее использовать такую простую библиотеку. Она занимает буквально байт 40 flash, думаю.
Чип, я таки попробовал использовать правильную модель обращения к портам из среды arduino.
В приложенном файле архив скетча и библиотеки ардуино.
При использовании учесть:
1. include'идь нужно только #include <ArduinoPins.h> хотя при добавлении библиотеки по умолчанию прописывается туча includ'ов. Лишние удалить. Еще можно инклудить pinlist.h для работы со списком пинов и latch.h для работы со сдвиговыми регистрами.
2. Не забывать в начале прописывать
using namespace IO;
3. Ноги имеют название D0 - D13 и A0 - A5.
4. Не забывать ставить двоеточие, а не точку при обращении к функции, к примеру D1::Set(); но не D1.Set();
5. Если хотите дать ноге свое название, то можно написать что-то вроде
typedef D8 LedPin;
и потом писать
LedPin::SetDirWrite();
LedPin::Set();
И самое главное - эти библиотеки дают быстрейший код из возможный и занимающий минимум места!
К примеру, D1::Set() выполняется два такта (одна команда контроллера).
Спасибо!
Почему-то у меня некорректно отображается схема в орле, или это я некорректно вижу)? ниже прикладываю скриншот.
http://i039.radikal.ru/1104/73/8c83b6e2b05ct.jpg
Так и должно быть, там была ардуина и я ее тупо вырезал. А части схемы на самом деле соединены - смотри на лейблы mosi, latch, sck
На самом деле можно сделать существенно более простую схему на двух мегах, к примеру 16-х, 8515 или подобных. Схема будет однослойной, на ней будет до десяти перемычек, из микросхем будет ft232rl, две меги и uln'ки. А количество каналов можно увеличить до 60 (20 полноцветных).