 Mez (01.03.2008 15:02, просмотров: 150) ответил mse на И этта...питание, небось, не 3В, значит ОСЦКАЛ подгонять под питалово надо...Кароче - начять и кончить. ;О) А за переключение 19200-9600 машштабированием сустем цлоцка - зачОт!!!
 Mez (01.03.2008 15:02, просмотров: 150) ответил mse на И этта...питание, небось, не 3В, значит ОСЦКАЛ подгонять под питалово надо...Кароче - начять и кончить. ;О) А за переключение 19200-9600 машштабированием сустем цлоцка - зачОт!!!
Попробовал, действительно не успевает. Ты прав. Заккоментировал все настройки в программе. Пусть фуз делит на 8. Получилась  устойчивая связь на 4800 при UBRR=30, а в datasheet при UBRR=25 должно быть 2400. Удвоение у меня не установлено. Всё-таки не совпадает.  Про подгон RC osc я думал, но по datasheet 7,3-8,1 MГц. Это значит, что если Fosc меньше, то и UBRR должно быть меньше, а у меня наоборот.
На этой плате (Crumb168) стоит керам.резонатор 20 МГц. Но при переключении на него частота не возрастает, а уменьшается. Тоже не знаю почему.
А вот последний листинг.
#include <inavr.h>
#include "iom168.h"
void sendchar(char data)
{
    int i = 0;
    UDR0 = data;
    if(SREG & 0x80)
    {
    while ( !(UCSR0A&0x40) && (i<10000) )
    {
        i++;
    }
    }
    else
        while( !(UCSR0A&0x40) );
    UCSR0A=UCSR0A|0x40;                             //delete TXCflag
}
int main( void )
{
  DDRB=00;
  PORTB=0xFF;
  DDRC=00;
  PORTC=0xFF;
  DDRD=00;
  PORTD=0xFF;
      // boost IntRC to 2Mhz to achieve 19200 baudrate
  //  CLKPR = (1<<CLKPCE);        // set Clock Prescaler Change Enable
    // set prescaler = 4, Inter RC 8Mhz / 4 = 2Mhz
  //  CLKPR = (1<<CLKPS1);
    // set prescaler = 8, Inter RC 8Mhz / 8 = 1Mhz
   // CLKPR = (1<<CLKPS1)|(1<<CLKPS0);
    UBRR0H = 0;
    UBRR0L = 30;
    // Enable 2x speed
    //UCSR0A = (1<<U2X0);
    // Enable receiver and transmitter
    UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(0<<RXCIE0)|(0<<UDRIE0);
    // Async. mode, 8N1
    UCSR0C = (0<<UMSEL01)|(0<<UMSEL00)|(0<<UPM00)|(0<<USBS0)|(3<<UCSZ00)|(0<<UCPOL0);
    //TWI по умолчанию запрещён  бит TWIEN=0 in TWCR
      __enable_interrupt();
while(1)
{
sendchar('A');
}
  //return 0;
}