TODOPIC

Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: corcu_ath1984 en 18 de Enero de 2006, 05:38:00

Título: micro aTMEGA 168. Ayuda por favor!!!!!!!!
Publicado por: corcu_ath1984 en 18 de Enero de 2006, 05:38:00
Hola, mi problema es que antes trabajaba con un micro aTMEGA8, pero se me quedo pequeña la memoria de programa y he pasado al 168. El problema es que no soy capaz de poner en marcha la linia serie, (no envio nada). No se si el problema es de la inicializacion o de que.


Ante todo muchas gracias.

Un saludo.
Título: RE: micro aTMEGA 168. Ayuda por favor!!!!!!!!
Publicado por: migsantiago en 19 de Enero de 2006, 16:06:00
Hola y bienvenido

Para que obtengas más ayuda siempre indica el lenguaje en que programaste tu código (ensamblador, c, etc.) y más detalles del proyecto que estás realizando.

Suerte
Título: RE: micro aTMEGA 168. Ayuda por favor!!!!!!!!
Publicado por: corcu_ath1984 en 23 de Enero de 2006, 01:07:00
Muchas gracias, en primer lugar, decir que estoy programando en C. Por otro lado, el proyecto es un panel de mandos, pero da lo mismo, el caso es que quiero programar la UART de la siguiente forma:

             - 4800 baudios
             - 8 bits de datos
             - sin paridad
             - 8 bits de datos
             - interrupción de recepción
             - quiero poder enviar y recibir


La inicialización que hago es la siguiente:


   UCSR0B = 0x00;    //Deshabilita la línea serie hasta inicializarla
   UCSR0C = 0x06;    //1bit de stop, 8 datos y no paridad  
   UBRR0L = 0x8F;     //Inicializa baudios a 4800 [Parte alta]
   UBRR0H = 0x00;    //Inicializa baudios a 4800 [Parte baja]
   
   UCSR0B = 0x98;    //Habilita el RX, su interrupción y el TX
Y la función de enviar es la siguiente:

   void Transmite_x (BYTE x)
   {
       PORTD |= 0x08;         //DIR a 1 para q transmita
       while ( !( UCSR0A & (1<<UDRE0)) )     //mientras no se pueda enviar nada
       ;
       UDR0 = x;                                      //Put data into buffer, sends the data
       retardo (600);                           //retardo de 600µs
       PORTD &= 0xF7;                                  //Para recibir datos
   }


     Con estos datos espero que me podáis ayudar, ya que estoy todo desesperado, o si tenéis algún ejemplo con la línea serie para el 168 que funcione que me lo dejéis. Muchas gracias y saludos para todos.


Título: RE: micro aTMEGA 168. Ayuda por favor!!!!!!!!
Publicado por: RedPic en 03 de Febrero de 2006, 14:24:00
Salvando las distancias ... yo uso el ATMEGA88 transmitiendo y recibiendo a 9600 baudios y no se si podrá servirte mi código y que funciona a las mil maravillas:

(Para WinAVR 20050214)

Codigo:


#include<avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

uint32_t SYSCLK=8000000UL;                  // frecuencia de reloj HARD
...

// inicializa el puerto serie
void initserie(void)
{
     //velocidad 9600 baudios
     UBRR0=SYSCLK/16/9600-1;  
     //activa TX RX y IRQRX
     UCSR0B=_BV(TXEN0)+_BV(RXEN0)+_BV(RXCIE0);
     //8 data 1 bit stop
     UCSR0C=0x06;  
}

// transmite un caracter por RS232
int uart_putchar(char c)
{
     loop_until_bit_is_set(UCSR0A, UDRE0);     // espera buffer libre
     UDR0 = c;                                 // transmite el caracter
     return 0;
}