Witam.
Próbuje napisać kod , ktory bedzie za pomocą przycisku na PC4 na przemian włączał i wyłączał diodę , a także nadawał stringi na uart0 , lub uart1. Wyłączyłem kompatybilność Atmega103 a także JTAg-a. Fusebity ustawione - CKSEL
Int. RC Osc. 1 MHz; Start-up time: 6 CK + 0 ms ,
cos mi nadaje, ale krzaki i znaki zapytania.
poniżej kod:
Procek mam rownież obstawiony w kwarc 16MHz zewn.
Proszę o wszelkie podpowiedzi - możliwie jasne jak dla laika , dlaczego nie odbieram tego co nadaje z procka. Co jest źle.
Dodam że nasłuchuje tego na 19200, a sam port usb/rs232 jest ok, poniewaz zamykając maxa232 rx i tx ze sobą mam poprawne echo zawsze.
Proszę o pomoc
Próbuje napisać kod , ktory bedzie za pomocą przycisku na PC4 na przemian włączał i wyłączał diodę , a także nadawał stringi na uart0 , lub uart1. Wyłączyłem kompatybilność Atmega103 a także JTAg-a. Fusebity ustawione - CKSEL
Int. RC Osc. 1 MHz; Start-up time: 6 CK + 0 ms ,
cos mi nadaje, ale krzaki i znaki zapytania.
poniżej kod:
#include <avr/io.h>
#include <util/delay.h>
#include <compat/deprecated.h>
#include <string.h>
#include <avr\pgmspace.h>
#define LED_OFF sbi(DDRC,PC0);cbi(PORTC,PC0) // ustawiam bit pc0 na wyjscie na stan wysoki
#define LED_ON sbi(DDRC,PC0);sbi(PORTC,PC0) // ustawiam bit pc0 na wyjscie na stan niski
//#define bit5_ON sbi(DDRC,PC5);cbi(PORTC,PC5) // tak sobie na probe
#define SWITH1_ON cbi(DDRC,PC4);sbi(PORTC,PC4) //ustawiam bit pc4 na wyjscie na stan wysoki
#define F_CPU 1000000
#define BAUD_RATE 19200 // prędkość transmisji po RS232
//#define MYUBRR (F_CPU/(1ul*BAUD_RATE)-1)// CPU_Hz/8/BAUD-1
#define MYUBRR (F_CPU/BAUD_RATE*16L)-1// CPU_Hz/8/BAUD-1
#define UART0_INITC (_BV(UCSZ01)|_BV(UCSZ00)) // 8bits, 1stop, no parity
#define UART1_INITC (_BV(UCSZ11)|_BV(UCSZ10)) // 8bits, 1stop, no parity
void UART_Transmit0(uint8_t data)
{
//while(!(UCSR0A & _BV(UDRE))); // wait for empty transmit buffer
UDR0 = data;
}
void UART_Transmit1(uint8_t data)
{
//while(!(UCSR1A & _BV(UDRE))); // wait for empty transmit buffer
UDR1 = data;
}
void UART_PutStringP0(const char* pStr)
{
uint8_t dat;
while((dat = pgm_read_byte_near(pStr++)) != 0)
{
UART_Transmit0(dat);
}
}
void UART_PutStringP1(const char* pStr)
{
uint8_t dat;
while((dat = pgm_read_byte_near(pStr++)) != 0)
{
UART_Transmit1(dat);
}
}
void uartInit()
{
#ifdef FASTSIM
UBRR0L = UBRR1L = 0;
UBRR0H = UBRR1H = 0;
/* UCSR0A |= _BV(U2X0);
UCSR1A |= _BV(U2X1);*/
#else
//UBRR0L = UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
UBRR0L = UBRR1L = (unsigned char)( MYUBRR);
UBRR0H =UBRR1H= (unsigned char)(MYUBRR >> 8);
#endif
UCSR0B = _BV(RXCIE0) | _BV(RXEN0) | _BV(TXEN0);
UCSR1B = _BV(RXCIE1) | _BV(RXEN1) | _BV(TXEN1);
UCSR0C = UART0_INITC; // 8bits, 1stop, no parity
UCSR1C = UART1_INITC; // 8bits, 1stop, no parity
}
int dioda=0;
int main(void)
{
uartInit();
//UART_init(MYUBRR);
UART_PutStringP1("ALA");
UART_Transmit1(10);
sbi(DDRC,0);
LED_OFF;
SWITH1_ON;
while(1)
{
if(bit_is_clear(PINC,4))
{
if(dioda==0)
{
//cbi(PORTC,0);
LED_ON;
_delay_ms(700);
dioda=1;
UART_PutStringP1("test");
}
else
{
//sbi(PORTC,0);
LED_OFF;
_delay_ms(700);
dioda=0;
UART_PutStringP1("test 1");
}
}
}
return (0);
}
Procek mam rownież obstawiony w kwarc 16MHz zewn.
Proszę o wszelkie podpowiedzi - możliwie jasne jak dla laika , dlaczego nie odbieram tego co nadaje z procka. Co jest źle.
Dodam że nasłuchuje tego na 19200, a sam port usb/rs232 jest ok, poniewaz zamykając maxa232 rx i tx ze sobą mam poprawne echo zawsze.
Proszę o pomoc