Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: ATmega16

timok16 [28.02.2006 15:15:50]

#

moi, onko tässä koodissa jotain pielessä vai onko mulla RS323 ongelmia mun laitteistossa, kun ei tuu TeraTermiin mitään.
Pitäis tulla toi teksti 'Tietokone'

Comments: tulostaa merkkitaulukon sarjaporttiin
***********************************************/
#include <avr/io.h>
#include "viive.h"
#include <stdio.h>
#define XTAL 8000000   // kiteen taajuus
#define BAUD 9600      // sarjaportin nopeus 9600 bps

void Put_char(char merkki);

void Put_char(char merkki)
{
  loop_until_bit_is_set(UCSRA, UDRE); // tarkista onko tx-puskuri tyhjä
  UDR = merkki; // UART Data Register
}
 //sarjaportin asetukset
 void Init_sarja(void)
{
 UBRRH=0x00;
 UBRRL=0x33;  //des 51(U2X=0)
 UCSRA=0x00;
 UCSRB=0x18;  //RXEN, TXEN
 UCSRC=0x86;  // URSEL, UCSZ1, UCSZ0 --> 1
}
int main(void)
{
  Init_sarja();

   unsigned char i;
   char taulu[9] = {'T', 'i', 'e', 't', 'o','k', 'o', 'n', 'e'};
   // merkkitaulukko, yksittäiset merkit kehystetään heittomerkeillä
   while(1)
    {
     for(i = 0; i < 9; i++)
      {
       Put_char(taulu[i]); // tulostetaan taulukon sisältö merkki kerrallaan
       Delay_ms(50);//50
      }
     Put_char(0x0A); // LF, Line Feed, rivin vaihto
     Put_char(0x0D); // CR, Carridge Return, telan palautus rivn alkuun
     Delay_ms(500); //500
    }
  }

timok16 [28.02.2006 19:57:50]

#

ONKS täällä ketään, joka on toiminut Atmelin ATmega16 mikroprosessorin parissa. Olis kiva saada hjälppiä.

peran [01.03.2006 20:29:28]

#

En edelleenkään ole ohjelmoinut avr:iä, mutta yksi kohta minua ihmetyttää koodissa.
Asetat BAUD:n definellä, mutta en näe minne ko. arvo menee.
Tietenkin saattaa olla että BAUD-arvo imaistaan rivillä:
#include <avr/io.h>
Mutta eikö siinä tapauksessa ko. arvo pitäisi antaa ennen icludea, jotta arvo olisi ladattaessa.
Eikö avr:ssä ole mitään Set_Baud-funktiota, tai vastaavaa?
Tosin samalla, jos BAUD-arvo pitää laittaa ennen includea, pitäneen laittaa myös XTAL-arvo.

Tosin virhettä voi myös yrittää tutkia muutenkin kuin tutkimalla mitä terminaaliin tulee.
Laittamalla avr-ikuiseen luuppiin tulostamaan tekstiä, ja katsomalla oskiloskoopilla lähettääkö se mitään.

Heikkoja ovat arvaukseni, mutta vastaapahan ainakin joku jotakin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta