реклама на сайте
подробности

 
 
> Непонятка с USART в Tiny2313, В протеусе работает, в контроллере нет
vsk
сообщение Feb 26 2008, 07:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 11-01-08
Пользователь №: 33 988



Подскажите что может быть, в протеусе работает, в контроллере нет, вернее на вывод в комп все пашет, кварц стоит на 4 Мгц, а вот от команд с ПК, типа цифры от 1 до 8, не работает.

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/iotn2313.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>

#define BAUD (4000000/16/9600 - 1)
#define USART_RXC_vect USART_RX_vect


void sleep(void);
volatile unsigned char rxbuff;
volatile unsigned int rx_int = 1;

SIGNAL(SIG_USART0_RECV)

{

if (bit_is_clear(UCSRA, FE))
{
rxbuff=UDR;
rx_int=1;
}

}

void sleep(void)
{
int i;
for (i=0; i<=10; i++)
_delay_loop_2(30000);
}

void RestartPin(int PinNumber)
{
sleep();
switch (PinNumber)
{
case 1:
PORTB=PORTB | (1<<PB0);
sleep();
PORTB=PORTB & (0<<PB0);
sendString(" TC1 Ok\0");
break;
case 2:
PORTB=PORTB | (1<<PB1);
sleep();
PORTB=PORTB & (0<<PB1);
sendString(" TC2 Ok\0");
break;
case 3:
PORTB=PORTB | (1<<PB2);
sleep();
PORTB=PORTB & (0<<PB2);
sendString(" TC3 Ok\0");
break;
case 4:
PORTB=PORTB | (1<<PB3);
sleep();
PORTB=PORTB & (0<<PB3);
sendString(" TC4 Ok\0");
break;
case 5:
PORTB=PORTB | (1<<PB4);
sleep();
PORTB=PORTB & (0<<PB4);
sendString(" TC5 Ok\0");
break;
case 6:
PORTB=PORTB | (1<<PB5);
sleep();
PORTB=PORTB & (0<<PB5);
sendString(" TC6 Ok\0");
break;
case 7:
PORTB=PORTB | (1<<PB6);
sleep();
PORTB=PORTB & (0<<PB6);
sendString(" TC7 Ok\0");
break;
case 8:
PORTB=PORTB | (1<<PB7);
sleep();
PORTB=PORTB & (0<<PB7);
sendString(" TC8 Ok\0");
break;
}
}

int main(void)
{
// DDRA = 0x00; //1 - out, 0 - in
DDRB = 0xFF;

USARTInit();

sei();

sleep();
sendString("Welcome to Remote Reset\0");

for (;;)
{
if (rx_int==1)
{
if (rxbuff == '1') RestartPin(1);
if (rxbuff == '2') RestartPin(2);
if (rxbuff == '3') RestartPin(3);
if (rxbuff == '4') RestartPin(4);
if (rxbuff == '5') RestartPin(5);
if (rxbuff == '6') RestartPin(6);
if (rxbuff == '7') RestartPin(7);
if (rxbuff == '8') RestartPin(8);
rx_int = 0;
}
}
return 0;
}



void USARTInit()
{

UBRRL = BAUD;
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(0<<UDRIE);
//UCSRC = (1<<UCSZ1)|(1<<UCSZ0);
}

void sendChar(unsigned char data)
{
while (!(UCSRA &(1<<UDRE))) ;
UDR = data;
}

void sendString(unsigned char s[])
{
int i=0;
while (i<64)
{
if (s[i]=='\0') break;
sendChar(s[i++]);
}
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vsk
сообщение Feb 26 2008, 14:19
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 11-01-08
Пользователь №: 33 988



Странно, код подкрутил, но теперь в терминале буквы теряются.....
и на switch defaut не переходит..... Вот умеченный код:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/iotn2313.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include "commutator.h"

#define BAUD (4000000/16/9600 - 1)

void sleep(void);
volatile unsigned char rxbuff;
volatile unsigned int rx_int = 0;

SIGNAL(SIG_USART0_RECV)
{
// if (bit_is_clear(UCSRA, FE))
// while ( !(UCSRA & (1<<RXC)) );
//{
rxbuff=UDR;//c;
rx_int=1;
//}
}

void sleep(void)
{
int i;
for (i=0; i<=10; i++)
_delay_loop_2(30000);
}

void RestartPin(unsigned char PinNumber)
{
sleep();
switch (PinNumber)
{
case 0x31:
PORTB=PORTB | (1<<PB0);
sleep();
PORTB=PORTB & (0<<PB0);
sendString(" TC1 Ok\0");
break;
case 0x32:
PORTB=PORTB | (1<<PB1);
sleep();
PORTB=PORTB & (0<<PB1);
sendString(" TC2 Ok\0");
break;
case 0x33:
PORTB=PORTB | (1<<PB2);
sleep();
PORTB=PORTB & (0<<PB2);
sendString(" TC3 Ok\0");
break;
case 0x34:
PORTB=PORTB | (1<<PB3);
sleep();
PORTB=PORTB & (0<<PB3);
sendString(" TC4 Ok\0");
break;
case 0x35:
PORTB=PORTB | (1<<PB4);
sleep();
PORTB=PORTB & (0<<PB4);
sendString(" TC5 Ok\0");
break;
case 0x36:
PORTB=PORTB | (1<<PB5);
sleep();
PORTB=PORTB & (0<<PB5);
sendString(" TC6 Ok\0");
break;
case 0x37:
PORTB=PORTB | (1<<PB6);
sleep();
PORTB=PORTB & (0<<PB6);
sendString(" TC7 Ok\0");
break;
case 0x38:
PORTB=PORTB | (1<<PB7);
sleep();
PORTB=PORTB & (0<<PB7);
sendString(" TC8 Ok\0");
break;
default:
sendString(" Error Code\0");
break;
}
}

int main(void)
{
//1 - out, 0 - in
USARTInit();
DDRB = 0xFF;

sei();

sleep();
sendString("Welcome to Remote Reset\0");

for (;;)
{
if (rx_int==1)
{
RestartPin(rxbuff);
rx_int = 0;
}
}
return 0;
}



void USARTInit()
{

UBRRL = BAUD;
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
//UCSRC = (1<<UCSZ1)|(1<<UCSZ0);
}

void sendChar(unsigned char data)
{
while (!(UCSRA &(1<<UDRE))) ;
UDR = data;
}

void sendString(unsigned char s[])
{
int i=0;
while (i<64)
{
if (s[i]=='\0') break;
sendChar(s[i++]);
}
}
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 26 2008, 16:00
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(vsk @ Feb 26 2008, 14:19) *
Странно, код подкрутил, но теперь в терминале буквы теряются..

Попробуйте прямое эхо организовать, типа такого
Код
SIGNAL(SIG_USART0_RECV)
{
  rxbuff=UDR;
  UDR = rxbuff;   //эхо
  rx_int=1;
}

Будут символы теряться?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
vsk
сообщение Feb 27 2008, 05:47
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 11-01-08
Пользователь №: 33 988



Цитата(=GM= @ Feb 26 2008, 19:00) *
Попробуйте прямое эхо организовать, типа такого
Код
SIGNAL(SIG_USART0_RECV)
{
  rxbuff=UDR;
  UDR = rxbuff;   //эхо
  rx_int=1;
}

Будут символы теряться?

После reset'a выдается слово с потерянными символами, при нажатии клавиш в терминале,
с предложенным кодом эха символы не возвращаются. Вместо Signal пробовал ставить
ISR, результат аналогичен, а в заголовочном файле код:
#ifdef __cplusplus
#define ISR(vector) \
extern "C" void vector(void) __attribute__ ((signal)); \
void vector (void)
#else
#define ISR(vector) \
void vector (void) __attribute__ ((signal)); \
void vector (void)
#endif

/** \def SIGNAL(signame)
\ingroup avr_interrupts

\code#include <avr/interrupt.h>\endcode

Introduces an interrupt handler function that runs with global interrupts
initially disabled.

This is the same as the ISR macro.
\note Do not use anymore in new code, it will be deprecated
in a future release.
*/

#ifdef __cplusplus
#define SIGNAL(signame) \
extern "C" void signame(void) __attribute__ ((signal)); \
void signame (void)
#else
#define SIGNAL(signame) \
void signame (void) __attribute__ ((signal)); \
void signame (void)
#endif

При SIGNAL(SIG_USART0_RECV)
{
// if (bit_is_clear(UCSRA, FE))
// while ( !(UCSRA & (1<<RXC)) );
//{
rxbuff=UDR;
UDR = rxbuff; //эхо
rx_int=1;
//}
} в терминале появляется текст и сразу за ним бегут символы с мусором без остановки, при нажатии кнопок, все замирает, и символов нет.
При ISR - аналогично.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vsk   Непонятка с USART в Tiny2313   Feb 26 2008, 07:38
- - vsk   Подскажите в какую сторону хоть копать то, fuse - ...   Feb 26 2008, 11:03
- - URANst   Кодswitch (PinNumber) { Как я понял ключ с...   Feb 26 2008, 11:17
- - vsk   Как я понял в терминале, в виде HEX'a протеуса...   Feb 26 2008, 11:38
|- - defunct   ЦитатаКак я понял в терминале, в виде HEX'a пр...   Feb 27 2008, 12:03
|- - vsk   Цитата(defunct @ Feb 27 2008, 15:03) Непр...   Feb 27 2008, 12:23
|- - defunct   Цитата(vsk @ Feb 27 2008, 14:23) И так то...   Feb 27 2008, 12:30
|- - vsk   Цитата(defunct @ Feb 27 2008, 15:30) send...   Feb 27 2008, 15:28
|- - defunct   Цитата(vsk @ Feb 27 2008, 17:28) В термин...   Feb 27 2008, 15:33
|- - vsk   Цитата(defunct @ Feb 27 2008, 18:33) 1. П...   Mar 25 2008, 06:36
- - =GM=   Цитата(vsk @ Feb 26 2008, 07:38) Подскажи...   Feb 26 2008, 12:27
- - URANst   Вот побыстрому набросал тоже что и вы, все работае...   Feb 26 2008, 12:47
- - vsk   Да, в протеусе все работает, а в живом железе, ник...   Feb 26 2008, 12:58
|- - =GM=   Цитата(vsk @ Feb 26 2008, 12:58) В прерыв...   Feb 26 2008, 13:46
|- - Сергей Борщ   Цитата(vsk @ Feb 26 2008, 14:58) ---- Ну ...   Feb 26 2008, 14:00
|- - =GM=   Цитата(Сергей Борщ @ Feb 26 2008, 14:00) ...   Feb 26 2008, 14:09
|- - Сергей Борщ   Цитата(=GM= @ Feb 26 2008, 16:09) А если ...   Feb 26 2008, 15:41
- - URANst   При таких настройках UARTa будут ошибки передачи, ...   Feb 26 2008, 14:36
- - bodja74   vsk Если даже в протеусе работает ,то на компе до...   Feb 27 2008, 12:27
- - vsk   Цитата(bodja74 @ Feb 27 2008, 15:27) vsk ...   Feb 27 2008, 12:37


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 18:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.014 секунд с 7
ELECTRONIX ©2004-2016