Witam.
Mam problem z połączeniem się z ATmegą 2561. Wcześniej wszystko chodziło dobrze do czasu aż wgrałem poprzez avr studio program do obsługi USART0. Użyłem do tego programatora USBisp z wgranym STK500v2. Nie ustawiałem żadnych Fusebitów (domyślne AVR Studio). Teraz nie mogę się połączyć z nim w żaden sposób. Próbowałem również przez ISPProg i STK200. W żaden sposób nie mogę uzyskać sygnatury M2561.
Programatory są na pewno sprawne. Wcześniej wgrywane programy do obsługi LCD, diod LED i klawiszy działały bez problemu. Zmieniałem prędkości ISP Frequency ale zawsze jest to samo.
Ostatni kod jaki wgrałem wyglądał mnie więcej tak:
Jeśli to ma znaczenie to podczas programowania moduł RS232 był podłączony do portów.
Czy mogłem w jakiś sposób wgrywając program do obsługi usart0 przestawić pracę mikrokontrolera tak że teraz nie ma dostępu do linii programowania? Jak wiadomo ta atmega używa linii PDI PDO na tych samych liniach co RXD0 i TXD0. Czy jest jakiś sposób aby ją zresetować? Posiadam też klona JTAG ICE ale nie ruszę tego procesora bo go nie obsługuje.
Proszę o radę.
Pozdrawiam
Mam problem z połączeniem się z ATmegą 2561. Wcześniej wszystko chodziło dobrze do czasu aż wgrałem poprzez avr studio program do obsługi USART0. Użyłem do tego programatora USBisp z wgranym STK500v2. Nie ustawiałem żadnych Fusebitów (domyślne AVR Studio). Teraz nie mogę się połączyć z nim w żaden sposób. Próbowałem również przez ISPProg i STK200. W żaden sposób nie mogę uzyskać sygnatury M2561.
Programatory są na pewno sprawne. Wcześniej wgrywane programy do obsługi LCD, diod LED i klawiszy działały bez problemu. Zmieniałem prędkości ISP Frequency ale zawsze jest to samo.
Ostatni kod jaki wgrałem wyglądał mnie więcej tak:
#include <avr/io.h> // dostęp do rejestrów
#include <avr/lcd.c>
#define sbi(port,bit) (port)&=~_BV(bit)
#define cbi(port,bit) (port)|=_BV(bit)
// Zmieniając poniższe definicje można dostosować program do potrzeb
#define F_CPU 16000000ul // częstotliwość zegara w Hz
#define UART_BAUD 4800ul // prędkość transmisji bit/s
#define LED_PORT PORTA // port diody LED
#define LED_BIT 0 // bit diody LED
#define DDR(x) _SFR_IO8(_SFR_IO_ADDR(x)-1) // adr. rej. kier. PORTx
#define PIN(x) _SFR_IO8(_SFR_IO_ADDR(x)-2) // adr. rej. wej. PORTx
#define LED_PORT_O LED_PORT // rejestr wyjściowy
#define LED_PORT_D DDR(LED_PORT) // rejestr kierunkowy
#define LED_PORT_I PIN(LED_PORT) // rejestr wejściowy
#define UART_CONST (F_CPU/(16ul*UART_BAUD)-1)
// _UCR_
#ifdef UCR
#define _UCR_ UCR
#endif
#ifdef UCSRB
#define _UCR_ UCSRB
#endif
#ifdef UCSR0B
#define _UCR_ UCSR0B
#endif
// _USR_
#ifdef USR
#define _USR_ USR
#endif
#ifdef UCSRA
#define _USR_ UCSRA
#endif
#ifdef UCSR0A
#define _USR_ UCSR0A
#endif
// Definicje funkcji
// inicjalizacja portu szeregowego
void UART_init(void)
{
UBRR0H = (unsigned char) (UART_CONST>>8);
UBRR0L = (unsigned char)UART_CONST; // ustaw prędkość transmisji
UCSR0B = _BV(RXEN0)|_BV(TXEN0); // załącz tx, rx
}
// wysyła znak podany jako parametr na port szeregowy
void UART_putchar (char c)
{
UDR0 = c; // wpisz c do rejestru UDR
//loop_until_bit_is_set(_USR_,TXC0); // czekaj na zakończenie transmisji
sbi(UCSR0A,TXC0); // ustaw bit TXC w rej. USR
}
// odbiera znak z portu szeregowego i zwraca go jako wartość funkcji
char UART_getchar (void)
{
loop_until_bit_is_set(_USR_,RXC0); // czekaj na zakończenie odbioru
cbi(UCSR0A,RXC0); // skasuj bit RXC w rej. USR
return UDR0; // zwróć zawartość rejestru UDR
}
int main(void) // program główny
{
UART_init(); // inicjalizacja portu szeregowego
//sbi(LED_PORT_D,LED_BIT); // użyj linii jako wyjścia
DDRA=0xff;
lcd_init(LCD_DISP_ON_CURSOR);
lcd_puts("cos");
for(;;) // pętla nieskończona
{
//cbi(LED_PORT_O,LED_BIT); // zapal diodę LED
cbi(PORTA,PA0);
UART_putchar('1'); // wyślij '1' na port szeregowy
UART_getchar(); // czekaj na znak z portu szeregowego
//sbi(LED_PORT_O,LED_BIT); // zgaś diodę LED
sbi(PORTA,PA0);
UART_putchar('0'); // wyślij '0' na port szeregowy
UART_getchar(); // czekaj na znak z portu szeregowego
}
}
Jeśli to ma znaczenie to podczas programowania moduł RS232 był podłączony do portów.
Czy mogłem w jakiś sposób wgrywając program do obsługi usart0 przestawić pracę mikrokontrolera tak że teraz nie ma dostępu do linii programowania? Jak wiadomo ta atmega używa linii PDI PDO na tych samych liniach co RXD0 i TXD0. Czy jest jakiś sposób aby ją zresetować? Posiadam też klona JTAG ICE ale nie ruszę tego procesora bo go nie obsługuje.
Proszę o radę.
Pozdrawiam