Autor Tema: micro aTMEGA 168. Ayuda por favor!!!!!!!!  (Leído 3099 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado corcu_ath1984

  • PIC10
  • *
  • Mensajes: 3
micro aTMEGA 168. Ayuda por favor!!!!!!!!
« 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.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: micro aTMEGA 168. Ayuda por favor!!!!!!!!
« Respuesta #1 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

Desconectado corcu_ath1984

  • PIC10
  • *
  • Mensajes: 3
RE: micro aTMEGA 168. Ayuda por favor!!!!!!!!
« Respuesta #2 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.



Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
RE: micro aTMEGA 168. Ayuda por favor!!!!!!!!
« Respuesta #3 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;
}




Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania


 

anything