Страница 27 из 115

Добавлено: Вс мар 22, 2009 15:26:06
sema
http://easyelectronics.ru/mb-lebedev-co ... shhij.html книжка М.Б Лебедев “CodeVision AVR пособие для начинающих” очень рекомендую. размер правда 60 метров но оно того стоит. еще почитайте обучалку http://radiokot.ru/start/mcu_fpga/avr/

Добавлено: Вс мар 22, 2009 15:35:07
Arlleex
Не понимаю, что делать с сгенерированным кодом

Добавлено: Вс мар 22, 2009 16:20:51
SeregaT
Stalker46 писал(а):Не понимаю, что делать с сгенерированным кодом
Как что? Дописывать свой (из сгенерированного можно лишнее удалить).
Можно ли в процессе написания кода изменить назначения портов?(ввод - вывод).
Я там настройку портов вообще не трогаю. Порты назначаю прямо в процессе написания кода.
Куда файл компилируется?
Папка проекта/EXE/Прошивка.hex
Когда я все сделал в настройках контролера, надо сгенерировать код. я его сгенерировал, там надо что то сохранить три раза, и появляется в окне сгенерированный код. что с ним делать?
Находим вот это:
while (1)
{
// Place your code here

};
И пишем свой код (я обычно убираю всё, что написано до этого, и пишу своё).
Народ, научите писать заголовочные файлы на код. На CodeVisionAVR.
А разве они не входят в комплект CodeVisionAVR или на сайте производителя? Или я что-то не так понял?
Какой язык лучше для программирования - СИ или ассемблер? Прошу ответить на этот вопрос профессионалов...
Ассемблер наверное получше будет (в плане надёжности и быстродействия), но там заморочек куча. Даже чтобы прописать задержку, на Си просто пишешь сколько миллисекунд и всё, а на ассемблере для этого нужно еще кучу расчётов сделать. В общем, на ассемблере нужно вручную прописывать действие каждого такта, считать количество импульсов и т.д. Тоесть ассемблер работает напрямую с железом.

Добавлено: Вс мар 22, 2009 17:38:00
SeregaT
Такой вот вопрос. Я сделал несколько входов, входы соединил с общим проводом через резисторы 10 Ком (чтобы не реагировали на помехи). Но всёравно, срабатывает даже если я не замыкаю вход на +5 В, а просто тыкаю в него какойнить железякой? Ведь резисторы между общим проводом и входом должны избавить от этого, а что-то нифига.
Когда я настраивал на то, чтобы входы ждали лог 0, и ставил резисторы между входом и +5 В, то такого вроде небыло...

Добавлено: Вс мар 22, 2009 17:48:27
therian
SeregaT писал(а): Когда я настраивал на то, чтобы входы ждали лог 0, и ставил резисторы между входом и +5 В, то такого вроде небыло...
у Пиков вроде есть зашитные диоды соединенные с +питанием, вот и выходит двойная зашита резистор от слабого тока спасает а диод от высокого напряжения/статики, думаю у Авр тоже самое есть

Добавлено: Вс мар 22, 2009 17:51:31
NiTr0
Диоды есть - это тестер подтвердит ;)
Но это не касается вопроса...
А по поводу помех - осцилл должен подсказать их уровень. Дело в том, что 0 считается все, что ниже 0.2Vcc (1В), а 1 - все, что выше 0.6Vcc (3В) по шиту - это гарантированные уровни, ито что лежит между ними - может считаться как 0 так и 1...
Исходя из этого - при подтяжке к +5 порог получается в 2 раза выше, чем при подтяжке к 0...

Добавлено: Вс мар 22, 2009 17:53:13
therian
ни кто не знает как в MPLAB 8.2 настроить чтоб хекс файл генерировался при компилировании и сохранялся в туже папку где и Си код? В более старых версиях вроде так и было а теперь Export делать приходится, бесит когда много исправлений делаю

Добавлено: Вс мар 22, 2009 17:53:27
Arlleex
while (1)
{
// Place your code here

};
}
{
#include <mega16>
#include <delay>

PORTD.0=1; // зажигаем первый светодиод
delay_ms(1000); // ждем секунду
PORTD.0=0; // выключаем первый светодиод
delay_ms(100); // ждем
PORTD.1=1; // зажигаем второй светодиод
delay_ms(1000); // ждем секунду
PORTD.1=0; // выключаем второй светодиод
delay_ms(100); // ждем
PORTD.2=1; // зажигаем третий светодиод
delay_ms(1000); // ждем секунду
PORTD.2=0; // выключаем третий светодиод
delay_ms(100); // ждем
PORTD.3=1; // зажигаем четвертый светодиод
delay_ms(1000); // ждем секунду
PORTD.3=0; // выключаем четвертый светодиод
delay_ms(100); // ждем
PORTD.4=1; // зажигаем пятый светодиод
delay_ms(1000); // ждем секунду
PORTD.4=0; // выключаем пятый светодиод
delay_ms(100); // ждем
PORTD.5=1; // зажигаем шестой светодиод
delay_ms(1000); // ждем секунду
PORTD.5=0; // выключаем шестой светодиод

};




я сам написал программу, шестью светодиодами управляет шесть портов D.
Правильно ли?

Добавлено: Вс мар 22, 2009 17:55:09
SeregaT
А может эти защитные диоды еще включить надо? Или всётаки нужно настроить порт на вход заранее? Я не настраивал, а просто где выход, писал PORTD.1, а где выход - PINB.1.

Добавлено: Вс мар 22, 2009 17:56:37
NiTr0
Диоды - настраивать явно не надо.
P.S. Прошлый каммент дополнил.

Добавлено: Вс мар 22, 2009 17:59:25
sema
to Stalker46 так прошейте в железку и увидите :wink: , неохота прошивать протеус вам в лапы :idea:

Добавлено: Вс мар 22, 2009 17:59:47
Arlleex
Не получилось :(
что делать, что я не так сделал?
Помогите плиз, вверху код...

Добавлено: Вс мар 22, 2009 18:02:33
SeregaT
Stalker46 писал(а): я сам написал программу, шестью светодиодами управляет шесть портов D.
Правильно ли?
Почти правильно.
Вот так она работает:

#include <mega8>
#include <delay>
void main(void)
{
PORTD=0x00; //Выставляем все выходы порта D на 0, то есть, выключаем весь порт D
DDRD=0xFF; //Делаем порт D, как выход, чтобы на выходах порта было напряжение 5В
while (1)
// Place your code here
{

PORTD.0=1; // зажигаем первый светодиод
delay_ms(1000); // ждем секунду
PORTD.0=0; // выключаем первый светодиод
delay_ms(100); // ждем
PORTD.1=1; // зажигаем второй светодиод
delay_ms(1000); // ждем секунду
PORTD.1=0; // выключаем второй светодиод
delay_ms(100); // ждем
PORTD.2=1; // зажигаем третий светодиод
delay_ms(1000); // ждем секунду
PORTD.2=0; // выключаем третий светодиод
delay_ms(100); // ждем
PORTD.3=1; // зажигаем четвертый светодиод
delay_ms(1000); // ждем секунду
PORTD.3=0; // выключаем четвертый светодиод
delay_ms(100); // ждем
PORTD.4=1; // зажигаем пятый светодиод
delay_ms(1000); // ждем секунду
PORTD.4=0; // выключаем пятый светодиод
delay_ms(100); // ждем
PORTD.5=1; // зажигаем шестой светодиод
delay_ms(1000); // ждем секунду
PORTD.5=0; // выключаем шестой светодиод

};
}

Добавлено: Вс мар 22, 2009 18:03:06
sema
Stalker46 писал(а):Не получилось :(
что делать, что я не так сделал?
Помогите плиз, вверху код...
порт на вывод настроен? в DDRD единички записаны? как проверяли?
:)) опередили

Добавлено: Вс мар 22, 2009 18:04:48
therian
Stalker46 писал(а):Не получилось :(
что делать, что я не так сделал?
ну там же написано "// Place your code here" наверно не просто так.

а у вас код вовсе не где просят не в while и даже не в maine вроде...
еще одно в Си после } ; (точку с запятой) ставить не нужно, (исключение будут структуры, ну и классы уже в с++) хотя она ничего и не делает и игнорируется

Добавлено: Вс мар 22, 2009 18:05:22
SeregaT
NiTr0 писал(а):Диоды - настраивать явно не надо.
P.S. Прошлый каммент дополнил.
Тоесть мне нужно на подтяжку к 0 поставить сопротивления поменьше?
:shock: Блин... кучу SMD резисторов не хотелось бы перепаивать. Вот будет ли это всё работать, если к входам подсоединить провода по несколько метров?

Добавлено: Вс мар 22, 2009 18:09:03
SeregaT
sema писал(а): порт на вывод настроен? в DDRD единички записаны? как проверяли?
Кстати, вот этот момент можно подробнее разъяснить? Как я понял, это нужно только для того, чтобы светодиоды подключить? Тоесть если этого не делать, то там будут просто слабые сигналы (типа для передачи данных)? Просто светодиоды без этого еле светят, а вот релюшки (через транзисторы) отлично включаются...

Добавлено: Вс мар 22, 2009 18:11:22
NiTr0
SeregaT писал(а):Вот будет ли это всё работать, если к входам подсоединить провода по несколько метров?
А почему бы и не работать?
Можно еще RC-фильтры на вход повешать, если не критично время реакции...

Добавлено: Вс мар 22, 2009 18:13:25
SeregaT
NiTr0 писал(а): А почему бы и не работать?
Да просто я подумал, что может сработать еще до замыканий контактов (ну типа на ёмкость провода отреагирует или помеху какую примет...

Добавлено: Вс мар 22, 2009 18:18:28
Arlleex
Порты на OUT поставил, значит вывод.
А что такое DDRD? литру почитать - итак начал читать, так что просто ответьте пожалуйста...