mam problem z odczytem danych z telefonu. wysylanie komend at do telefonu (siemens s45) odbywa sie bez problemu - aparat reaguje prawidlowo. linia Tx kontrolera polaczona z telefonem poprzez opornik i zenera 3,3V. Linia odbiorcza polaczona bezposrednio.
komunikacja z telefonem za pomoca terminala rowniez dziala prawidlowo.
biblioteka uart:
program odczytujacy:
niestety program zawiesza sie przy odczycie, nie moge dojsc do ladu zeby odczytac cos z telefonu (w tym przypadku imei)
komunikacja z telefonem za pomoca terminala rowniez dziala prawidlowo.
biblioteka uart:
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <string.h>
#define FOSC 11059200
#define UART_BAUD 19200ul // prędkość transmisji bit/s
#define UART_CONST (F_CPU/(16ul*UART_BAUD))-1
#define uchar unsigned char
unsigned char bufor[32];
void UARTInit()
{
UBRRH = (unsigned char)(UART_CONST>>8);
UBRRL = (unsigned char)UART_CONST;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* ustawienie 8 bitów danych i 1 bity stopu */
UCSRC = (1<<URSEL)|(3<<UCSZ0);
}
void UARTSendChar( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}
void UARTSendString(char *data)
{
int dlugosc, k =0 ;
dlugosc = strlen(data);
for(k = 0; k<dlugosc; k++)
{
UARTSendChar(data[k]);
}
}
unsigned char UARTReceiveChar( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) )
;
/* Get and return received data from buffer */
return UDR;
}
void UARTReceiveString(void)
{
unsigned char i=0;
do
{
if ((bufor[i] = UARTReceiveChar()) == '\n') break; //dodaje odebrane znaki do tablicy, jesli odbierze '\n' to przerywa petle i wychodzi z funkcji
i++;
}while (i < 32); // zeby nie przepelnic bufora
}program odczytujacy:
#include <avr/io.h>
//#include <avr/interrupt.h>
#include <stdlib.h>
#include "hd44780.h"
#include "twi.h"
#include "bcd.h"
#include <avr/delay.h>
#include <stdio.h>
//#include <avr/sleep.h>
#include <avr/signal.h>
int main(void) //Program główny
{
unsigned char napis[16];
//unsigned int value;
unsigned char napis2[5];
unsigned char napis3;
LCD_Initalize();
UARTInit();
while (1)
{
//UARTSendString("AT^SMSO");
UARTSendString("AT+CGMM");
UARTSendChar(0x0D);
napis3 = UARTReceiveChar();
// if(napis3 == 0x0D) // jesli odebrano ENTER czyli LF
{
// napis3=UARTReceiveString();
}
LCD_GoTo(0,1);
LCD_WriteText(napis3);
_delay_ms(100);
//LCD_Clear();
}
return (0); //Powrót do początku programu
}niestety program zawiesza sie przy odczycie, nie moge dojsc do ladu zeby odczytac cos z telefonu (w tym przypadku imei)