Извиняюсь, если было или не в ту тему, но вот такая проблема возникла с CodeVisionAVR впервые за несколько лет работы:
При переносе проектов на другой комп и установки точно такой же версии CodeVisionAVR 2.05 возникла проблема: не открываются некоторые проекты! КодВижн выдает ошибку с единственным словом: "The"...
Проблема наблюдается на 2-х разным машинах с разными версиями виндоф. Кто нибудь сталкивался с подобной проблемой? Отзовитесь, пожалуйста...
Тренируюсь в Протеусе с внешней памятью 24С256, с помощью библиотеки i2c.h и функций i2c_write и т.д. Писать побайтно без проблем, а вот если например надо стереть всё, FF на все 32 кб, то на каждый байт по 10 мс-это же сколько времени уйдет. Читал, что можно постранично писать в память, а как это сделать?
Ну понятно, даташиты читать нада..
Первый адрес и отправляешь 64 байта и так вроде работает, без LOW адреса и какой смысл этого адреса последнего байта, если и так известно, что он будет= первый+64.
Смысла нет, поэтому адрес последнего байта нигде и не требуется. В даташите в том числе.
Следует учесть, что если адресовать первый байт не кратный 64 (начать писать страницу не с нуля, а где-то с серединки страницы), то при переполнении страницы следующий байт будет записываться в начало той же, а не следующей страницы.
[uquote="WiseLord",url="/forum/viewtopic.php?p=3172423#p3172423"]В даташите в том числе.[/uquote]
А что же это тогда?- Adress High Byte и Adress Low Byte.
И еще вопрос- при побайтной записи, после каждого байта делаем задержку ~10 мс, а при постраничной записи между байтами не делаем и после записи страницы тоже не делаем?
Это старший байт адреса и младший байт адреса. Одного и того же адреса - начального! Как, собственно, и следует из их названий.
При постраничной записи передаваемыми данными набиваются SRAM-ячейки специального регистра, а уже потом за 10мс они все параллельно сбрасываются в матрицу в нужную строку. Соответственно, страничная запись приблизительно в 64 раза быстрее.
На вход Т1 таймера постоянно поступают импульсы, широкий импульс-1, короткий-0, импульсов-36, начало определяется самым широким импульсом, равным периоду. Надо измерять длительности импульсов и записывать эти нули и единицы в переменную. Как это сделать? Мне бы посмотреть код для такой цели.
настраивай прерывание по захвату, в прерывании:
если иср1>10 //проверка дребезга
{тсср1-=иср1; //сброс таймера для след. замера
приемник=приемник<<1; //продвигаем переменную приемник
//если (иср1 < 100) короткий импульс (точка) действий нет
если (иср1 > 100) приемник++; //тире
если (иср1 > 1000) приемник=0; // стартовый импульс
};
// это для постоянной скорости
Для тех, кто не учил магию мир полон физики
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Но прерывание по захвату работает с ножки ICP, а тут счетный вход Т1. Остается вариант в цикле смотреть ногу, запускать таймер и смотреть длительность.
получается так... ногу придется использовать как вход порта, а не по железной доп. возможности.
Для тех, кто не учил магию мир полон физики
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Всем привет. Помогите с кодом. Нужно вставить таймер отключения для HL1 через минуту его работы. и осталась функция раньшего отключения по S1 как реализовано у меня
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3180812#p3180812"]получается так... ногу придется использовать как вход порта, а не по железной доп. возможности.[/uquote]
Прошу раскритиковать,если что..
Т.к. мне нужно знать длительность импульса в узко конкретном диапазоне -до 200 us и не нужно знать точную длит.,а просто для сравнения с каким то значением, сделал так-настроил таймер на 250 кгц( но с кварцем в проекте 16 мгц, в Протеусе на 8 мгц-только так корректно работает), и по спаду импульса считаю длит. по TCNT0, диапазон получается до 30, вполне можно работать. А с 16 и 8 мгц я что-то не понял.
если такая длительность маленькая, может и не тревожить таймер а обойтись программными задержками как поймал прерывание задержка антидребезга, перепроверил ногу — отпущена - выходим, нет - делаем нужную задержку потом проверяем снова отпущена - короткий, ещё нажата - длинный (можно ещё флаг прерывания проверить - убедиться, что это одно длинное нажатие, а не несколько коротких — при одном длинном флаг будет сброшен).
Для тех, кто не учил магию мир полон физики
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
[uquote="dm211",url="/forum/viewtopic.php?p=3192098#p3192098"]Прерывание тут вообще не используется.[/uquote] А зря: промежуток довольно маленький и желательно максимально точно отследить его начало, но постоянно проверять порт - довольно неудобно, да и процессор нагружает.
Правда, вспоминаю, было ограничение на используемую ногу - если на ней нет прерывания, то его, к сожалению и не использовать...
Для тех, кто не учил магию мир полон физики
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Точно уверены, что именно на землю, а не к питанию, подтянуты входы расширения?
Ну и ещё у PCF8574 базовый адрес 0x40, а у PCF8574A - 0x70, так что ещё дело может быть и в этом.
Ещё момент: микросхема может выдать "честный" ноль, но по единице уже нет. Поэтому если там на выходе у Вас вдруг светодиод, нужно подключать его (с резистором, естественно) между ножкой и питанием, а не между ножкой и землёй.