А я тут в недоумении что я неправильно говорюalex_ писал(а):Вопрос снимается, извиняй, я спросоня тебя перепутал с server021, спать пора
Откуда на входе берётся постороннее напряжение.
- Сообщения: 76
- Зарегистрирован: Чт ноя 13, 2014 19:37:34
- Реклама
- Сообщения: 21
- Зарегистрирован: Ср окт 15, 2014 16:56:53
Немного покопавшись понял, что на ножке 3.3 вольта когда я переключаю тумблер или 3.9 (напряжение питания) когда тумблер отключен. При это МК уверен что на ножке логический 0
- Сообщения: 76
- Зарегистрирован: Чт ноя 13, 2014 19:37:34
Ну вроде логический ноль до 2.5 v максимум, если не ошибаюсь. А что за модель мк?server021 писал(а):Немного покопавшись понял, что на ножке 3.3 вольта когда я переключаю тумблер или 3.9 (напряжение питания) когда тумблер отключен. При это МК уверен что на ножке логический 0
- Сообщения: 21
- Зарегистрирован: Ср окт 15, 2014 16:56:53
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Вроде ж до половины питания, а не 2.5 В.
Кнопки к AVR-контроллеру лучше подключать между выводом и землей, а не между выводом и питанием. Это дает возможность использовать собственную подтяжку, хотя внешняя все равно надежнее.
Если схема
Кнопки к AVR-контроллеру лучше подключать между выводом и землей, а не между выводом и питанием. Это дает возможность использовать собственную подтяжку, хотя внешняя все равно надежнее.
Если схема
то откуда там возьмется лог.0? Надо хоть резистором подтянуть.Кнопка. Замыкает 2 контакта, один из которых идет на какой-нибудь пин, а второй к плюсу напряжения, чего тут рисовать) Обычно заземляют такие вещи, особенно для кнопки, через резистор.
- Реклама
- Сообщения: 21
- Зарегистрирован: Ср окт 15, 2014 16:56:53
У меня от батареи идёт провод на тумблер в одном положении к КМ идёт +3,3В, а в другом ножка остаётся в воздухе. Самое интересное, что на некоторых ножках все работает, а на некоторых нет. Ножки настроены абсолютно одинаково!
- Сообщения: 76
- Зарегистрирован: Чт ноя 13, 2014 19:37:34
Перечитайте пару раз. Да и автор говорит не о кнопках...COKPOWEHEU писал(а):Надо хоть резистором подтянуть.
Запомните раз и навсегда - если Вы как-то опрашиваете вывод, он ни в каких случаях не должен болтаться в воздухе. Он всегда должен находится под каким-то потенциалом, взятом со схемы.server021 писал(а):У меня от батареи идёт провод на тумблер в одном положении к КМ идёт +3,3В, а в другом ножка остаётся в воздухе.
- Сообщения: 21
- Зарегистрирован: Ср окт 15, 2014 16:56:53
Принудительно подтягивал к нулю, все равно + сохранился!Alkul писал(а):server021 писал(а):УОн всегда должен находится под каким-то потенциалом, взятом со схемы.
Можно увидеть схему и исходник программы?server021 писал(а):Принудительно подтягивал к нулю, все равно + сохранился!
- Сообщения: 21
- Зарегистрирован: Ср окт 15, 2014 16:56:53
Код: Выделить всё
#include <mega16.h>
#include <delay.h>
// 0 - красный 1- желтый 12 - желтый жел. миг 11 - 2 желтых 2 - зелёный 4 - белый
int svet1 = 0; int svet2 = 0; int svet3 = 0; int svet4 = 0; int svet5 = 0; int svet6 = 0; int svet7 = 0; int svet8 = 0; int svet9 = 0;
int svet10 = 0; int svet11 = 0; int svet12 = 0; int svet13 = 0; int svet14 = 0; int svet15 = 0;
int sig_ger = 0;
int i = 0; int m = 0; int t = 0;
int contol_svet15 = 0; int contol_svet4 = 0; int contol_svet5 = 0; int tmp = 0;
void update_status_svetofor()
{
if (svet13 == 0) {PORTC.6 = 0; PORTB.5 = 1;} else {PORTC.6 = 1; PORTB.5 = 0;}
if (svet12 == 0) {PORTD.6 = 1;} else {PORTD.6 = 0;}
if (svet4 == 0) {PORTA.4 = 0; PORTA.5 = 1; PORTA.6 = 1; PORTA.7 = 1;}
if (svet4 == 1) {PORTA.4 = 1; PORTA.5 = 0; PORTA.6 = 1; PORTA.7 = 1;}
if (svet4 == 2) {PORTA.4 = 1; PORTA.5 = 1; PORTA.6 = 0; PORTA.7 = 1;}
if (svet4 == 4) {PORTA.4 = 1; PORTA.5 = 1; PORTA.6 = 1; PORTA.7 = 0;}
if (svet5 == 0) {PORTA.0 = 0; PORTA.1 = 1; PORTA.2 = 1; PORTA.3 = 1;}
if (svet5 == 1) {PORTA.0 = 1; PORTA.1 = 0; PORTA.2 = 1; PORTA.3 = 1;}
if (svet5 == 2) {PORTA.0 = 1; PORTA.1 = 1; PORTA.2 = 0; PORTA.3 = 1;}
if (svet5 == 4) {PORTA.0 = 1; PORTA.1 = 1; PORTA.2 = 1; PORTA.3 = 0;}
if (svet15 == 0) {PORTB.0 = 1; PORTB.1 = 0; PORTB.2 = 1; PORTB.3 = 1; PORTB.4 = 1;}
if (svet15 == 1) {PORTB.0 = 1; PORTB.1 = 1; PORTB.2 = 0; PORTB.3 = 1; PORTB.4 = 1;}
if (svet15 == 2) {PORTB.0 = 1; PORTB.1 = 1; PORTB.2 = 1; PORTB.3 = 0; PORTB.4 = 1;}
if (svet15 == 12) {PORTB.1 = 1; PORTB.2 = 0; PORTB.3 = 1; PORTB.4 = 1; tmp = tmp +1; if (tmp == 3000) {if (PORTB.0 == 1) {PORTB.0 = 0;} else {PORTB.0 = 1;} tmp = 0;}}
if (svet15 == 11) {PORTB.0 = 0; PORTB.1 = 1; PORTB.2 = 0; PORTB.3 = 1; PORTB.4 = 1;}
}
void tranzit()
{
if (t == 0) {svet15 = 0; svet13 = 0; svet12 = 0;svet4 = 0; svet5 = 0;}
if (PINC.0 == 1) {svet4 = 0; svet5 = 0;} else
{
if ((PINC.1 == 0) && (contol_svet5 == 0)) {svet5 = 2; svet4 = 0;}
if ((PINC.1 == 1) && (contol_svet4 == 0)) {svet4 = 2; svet5 = 0;}
}
if (PIND.5 == 1) {svet15 = 0;} else
{
if (PINC.2 == 0) {
if (((svet5 == 1) || (svet5 == 2)) && ( contol_svet15 == 0) ) {svet15 = 12;}
if ((svet5 == 0) && ( contol_svet15 == 0) ) {svet15 = 11;}
}
else
{
if (((svet4 == 1) || (svet4 == 2)) && ( contol_svet15 == 0) ) {svet15 = 2;}
if ((svet4 == 0) && ( contol_svet15 == 0) ) {svet15 = 1;}
}
}
if (PINC.5 == 1) {contol_svet5=0; contol_svet4=0; if (PINC.1 == 1) {svet5=2; svet4=0;} else {svet5=0; svet4=2;}}
if (PINC.7 == 1) {contol_svet5=2; contol_svet4=2; if (PINC.1 == 1) {svet5=1; svet4=0;} else {svet5=0; svet4=1;}}
if (PIND.0 == 1) {contol_svet4=1; svet4 = 0; contol_svet15 = 0;}
if (PIND.1 == 1) {contol_svet5=1; svet5 = 0; contol_svet15 = 0;}
if (PIND.4 == 1) {svet15 = 0; contol_svet15 = 1;}
}
void marsh_gotov_manevrov()
{ //написать логику!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
svet13 = 0;
if (PIND.5 == 0) {svet13 = 4;} else
{
if ((PINC.4 == 0) && (PINC.3 == 0)) {svet13 = 0;}
if ((PINC.4 == 0) && (PINC.3 == 1)) {svet13 = 4;}
if ((PINC.4 == 1) && (PINC.3 == 0)) {svet13 = 0;}
if ((PINC.4 == 1) && (PINC.3 == 1)) {svet13 = 4;}
}
if (PINC.2 == 1) {svet12 = 4;} else {svet12 = 0;}
if (PINC.1 == 0) {svet4 = 0; svet5 = 4;} else {svet4= 4; svet5 = 0 ;}
}
void manevrov()
{
if (m == 0) {svet15 = 0; svet13 = 0; svet12 = 0;svet4 = 0; svet5 = 0;}
if (PIND.7 == 1){marsh_gotov_manevrov();}
if (PIND.0 == 1) {svet4 = 0;}
if (PIND.1 == 1) {svet5 = 0;}
if (PIND.2 == 1) {svet12 = 0;}
if (PIND.3 == 1) {svet13 = 0;}
if (PIND.4 == 1) {svet15 = 0;}
}
void main (void)
{
DDRA = 0xff;
PORTA= 0xff;
DDRB = 0xff;
PORTB= 0b00111111;
DDRC = 0xff;
PORTC= 0x00;
DDRD = 0xff;
PORTD= 0b0000000;
while (1)
{
if (PINB.6 == 1)
{svet2 = 0; svet3 = 0; svet8 = 0; svet9 = 0;}
else
{
if (PINB.7 == 0) {tranzit(); t=1; m=0;} else {manevrov(); t=0; m=1;}
}
update_status_svetofor();
}
}
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Ключи 1-7 почему-то сдвоенные, подтяжки к питанию или земле нет. Ключ 2 вообще не подключен.
Чем обусловлен выбор именно таких чисел - 0,1,2,4,11,12, не проще было взять 0,1,2,3,4,5 или 0,2,4,8,0x10,0x20?if (svet4 == 0) {PORTA.4 = 0; PORTA.5 = 1; PORTA.6 = 1; PORTA.7 = 1;}
if (svet4 == 1) {PORTA.4 = 1; PORTA.5 = 0; PORTA.6 = 1; PORTA.7 = 1;}
if (svet4 == 2) {PORTA.4 = 1; PORTA.5 = 1; PORTA.6 = 0; PORTA.7 = 1;}
if (svet4 == 4) {PORTA.4 = 1; PORTA.5 = 1; PORTA.6 = 1; PORTA.7 = 0;}
Схему именно этого можно?Принудительно подтягивал к нулю, все равно + сохранился!
server021, попробуй отключить JTAG, в 16 меге он по умолчанию включен и сидит как раз на этих ногах, возможно он и мешает.
А товарищ прав, я тогда долго искал где косяк в прошивке и почему не работает LCD который у меня как раз повешен на прорт С. А вся проблема из-за JTAGa 


