Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
railway
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 30
1

Все работает в Протеусе, а в железе не хочет

05.04.2014, 12:08. Просмотров 1627. Ответов 11
Метки нет (Все метки)

Всем доброго времени суток.
Есть прошивка для atmega16, она работает в протеусе, но в железе отказывается это делать. Прошиваю через 5 проводков и uniprof.
МК должен просто "дрыгать тремя лапками" при приеме команд типа "010101"(включены первые пины) или "010203" (включены соответственно 1,2,3 пин ).Во вложении код, хекс, проект в протеусе, фьюзы.
Подскажите пожалуйста, что не так?
0
Вложения
Тип файла: rar cyber.rar (139.4 Кб, 15 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2014, 12:08
Ответы с готовыми решениями:

Работает в протеусе но не работает в железе
Почему эта схема работает в Protheuse а в железе нет. Чего только не делал: резисторы подтягивающие...

Функции в Протеусе работают а в железе (Atmega128a) нет
Имею AtmelStudio 7, Протеус 7, и программу написанную на С++. В Протеусе работает. Загружаю в...

PIC16F628A и USART (не работает в протеусе)
Итак, задача простейшая... (Ну я совсем новичок еще... :laughing:) 1) Послать байт на мк с...

Не работает в железе (работает в Proteus, ATmega8, ASM)
Прошивка работает в протеусе (V 7.7 SP 2), но не работает в железе. На счет фьюзов не совсем уверен...

Не работает код железе.
Всех приветствую. Собираюсь управлять яркостью свечения светодиодов одной кнопкой посредством ШИМ,...

11
raxp
10188 / 6571 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
05.04.2014, 14:27 2
...а протеус тоже во вложении? Cхему экспортировать в графический формат и вложить в пост, чтобы ее сразу всем было видно, исходный код вложить текстом в пост и обернуть в теги.
0
railway
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 30
06.04.2014, 08:05  [ТС] 3
C++
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#define F_CPU 1000000L
#define LED1                 0
#define LED2                1
#define LED3                 2
#define LED4                3
#define LED5                4
#define LED6                 5
#define LED7                6
#define LED8                7
 
#define LED_PORTA         PORTA
#define LED_DDRA        DDRA
#define LED_PORT         PORTB
#define LED_DDR                DDRB
#define LED_PORTC         PORTC
#define LED_DDRC                DDRC
 
 
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
 
unsigned char LEDS[9] = {0, 1<<LED1, 1<<LED2, 1<<LED3, 1<<LED4, 1<<LED5, 1<<LED6,
1<<LED7, 1<<LED8};
 
unsigned char count = 0;
 
void write_UDR (unsigned char value)
{
        while(!(UCSRA & (1<<UDRE)));
        UDR = value;
}
 
void set_led_A (unsigned char no)
{
    if (no > 8) no = 0;
    PORTA = 0; 
        PORTA |= LEDS[no]; 
        _delay_ms(30);         
    if (PINA == LEDS[no])
    { 
                write_UDR('0'+no);
    }
}
 
void set_led_B (unsigned char no)
{
    if (no > 8) no = 0;
    PORTB = 0; 
        PORTB |= LEDS[no]; 
        _delay_ms(30);         
    if (PINB == LEDS[no])
    { 
                write_UDR('0'+no);
    }
}
 
void set_led_C (unsigned char no)
{
    if (no > 8) no = 0;
    PORTC = 0; 
        PORTC |= LEDS[no]; 
        _delay_ms(30);         
    if (PINC == LEDS[no])
    { 
                write_UDR('0'+no);
    }
}
 
 
ISR(USORT_RXC_vect)
{
        switch(count)
        {
    case 0:
            set_led_A (UDR);
            break;
    case 1:
            set_led_B (UDR);
            break;
    case 2:
            set_led_C (UDR);
            break;
    }
    count++;
    count %= 3;        
}
 
int main(void)
{
//volatile unsigned char i;
 
#define XTAL 1000000L
#define baudrate 2400L
#define bauddivider (XTAL/(16*baudrate)-1)
#define HI(x) ((x)>>8)
#define LO(x) ((x)& 0xFF)
 
ADCSRA=0x00;
UBRRL = LO(bauddivider);
UBRRH = HI(bauddivider);
UCSRA = 0;
//UCSRB = 1<<RXEN|1<<TXEN|1<<RXCIE|0<<TXCIE;
//UCSRC = 1<<URSEL|1<<UCSZ0|1<<UCSZ1;
UCSRB=0x98;
UCSRC=0x86;
 
LED_DDRA= 0xff;
LED_PORTA= 0b00000000;
//LED_DDR = 1<<LED1|1<<LED2|1<<LED3|1<<LED4|1<<LED5|1<<LED6|1<<LED7|1<<LED8;
LED_PORT=0b00000000;
LED_DDR =0xff;
LED_PORTC=0b00000000;
LED_DDRC =0xff;
sei();
 while(1)
  {
//i++;
//LED_PORT ^=1<<LED1;
//_delay_ms(1000);
  }
return 0;
}
Добавлено через 52 минуты

111
0
Миниатюры
Все работает в Протеусе, а в железе не хочет  
raxp
10188 / 6571 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
06.04.2014, 11:24 4
Если вы подключаете мегу через преобразователь уровней RS-232/UART TTL (типа MAX232, ADM3202 и пр.) или через конвертор USB/UART TTL, еще могу понять.

Но ежели вы пихаете напрямую пяти-вольтовые уровни UART меги к железному порту с перепадами +-5...12 вольт RS-232, то неудивительно, что не работает ...и хотя там токи небольшие и есть защитные диоды в меге по входу, но вы также рискуете спалить и I/O меги и сам порт. Мало того: TXD (RS-232) порта следует подключать к RXD порта меги (разумеется через конвертор), а RXD к TXD меги.
Все работает в Протеусе, а в железе не хочет

Все работает в Протеусе, а в железе не хочет

Все работает в Протеусе, а в железе не хочет


p.s.: среди прочего, вы приложили внутреннюю схему симуляции. В реальности положено ставить блокировочные керамические емкости по цепи питания на корпус ИМС. Также совершенно не видно как и откуда завели питание, вот для этого и нужна полная схема.
0
Voland_
1689 / 1034 / 97
Регистрация: 04.01.2010
Сообщений: 3,484
06.04.2014, 12:21 5
Цитата Сообщение от raxp Посмотреть сообщение
среди прочего, вы приложили внутреннюю схему симуляции. В реальности положено ставить блокировочные керамические емкости по цепи питания на корпус ИМС. Также совершенно не видно как и откуда завели питание, вот для этого и нужна полная схема.
поддерживаю.
а еще на схеме нигде нет привязки ресета к плюсу через резистор, а в коде нет инициализации портов на выход. По умолчанию они все входами без привязки болтаются, включая TX.
0
railway
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 30
06.04.2014, 12:43  [ТС] 6
В железе подключено все через преобразователь USB-UART на FTDI, с него же и взято питание. а при симуляции питание необязательно заводить вроде как.
0
Voland_
1689 / 1034 / 97
Регистрация: 04.01.2010
Сообщений: 3,484
06.04.2014, 13:01 7
Ресет проверили? DDRD|=2; в инит дописали?
0
railway
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 30
06.04.2014, 13:23  [ТС] 8
А ресет обязательно привязывать?
и DDRD|=2 это инициализация портов на выход?
0
russo turisto
97 / 92 / 0
Регистрация: 24.04.2010
Сообщений: 275
06.04.2014, 21:54 9
фузы могли не запрграмировать как нужно и не запускается контролер. Осцилоскоп в помощь.
0
railway
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 30
07.04.2014, 06:28  [ТС] 10
Фьюзы вроде как верно прошиты...
0
Voland_
1689 / 1034 / 97
Регистрация: 04.01.2010
Сообщений: 3,484
07.04.2014, 10:10 11
Цитата Сообщение от railway Посмотреть сообщение
А ресет обязательно привязывать?
в ДШ я таки нашел схемку с резистором к плюсу. Что правда непонятно внутри он чипа или снаружи. В серии AT90 резистора внутри не было, поэтому чип "то ехал, то не ехал".

Цитата Сообщение от railway Посмотреть сообщение
и DDRD|=2 это инициализация портов на выход?
это установка DDRD.1 на выход, т.к. TX от UART'а сидит именно на нем.

ЗЫ: соберите простейший проект, зажигающий на выходе контроллера светодиод, чтобы убедиться, что:
а) Компилятор выдает подходящий код.
б) Контроллер програмится и запускается.

Затем идите от этого, базового, простого к более сложному. За что-то надо зацепиться, а вы пытаетесь запустить проект сразу (хоть он и должен).
0
Памирыч
14.04.2014, 08:02     Все работает в Протеусе, а в железе не хочет
  #12
 Комментарий модератора 
Закрыто. Причина: кросспостинг
0
14.04.2014, 08:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2014, 08:02
Привет! Вот еще темы с ответами:

lcd_puts_p не работает в железе
Вывожу строку на LCD (HD44780) с использованием библиотеки от Peter Fleury:...

АЦП работает в протеусе не работает в реале!(решена)
Подскажите кому не лень разобраться в чем трабла! Эленентарная прога проверки работы ацп. В...

Глючит страшно курсор: хочет сам все выделяет, хочет удаляет часть текста, хочет прыгает где ему вздумаеться
Подскажите как быть...глючит страшно курсор: хочет сам все выделяет, хочет удаляет часть текста,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru