Skocz do zawartości

Czytnik RFID + Atmega8


Pomocna odpowiedź

Napisano

Witam, wypatrzyłem w sieci moduł czytnika RFID http://www.meraprojekt.com.pl/files/MP01612.pdf i chciałbym podłączyć do niego mikrokontroler Atmega8, wiem że wyjście czytnika muszę podpiąć pod RXD uC. Tylko niewiem jak odebrać dane tego modułu i zapisać do jakiejś zmiennej lub tablicy. Program chciałbym napisać w C ale na internecie nie mogę kompletnie nic znaleźć co mogłoby mi się przydać, jeśli to możliwe to proszę o podesłanie jakiegoś kodu lub linku z kursem, mam takie coś http://www.piekary.net/~jermi/datasheets/avr_rs232obsluga.pdf ale średnio to rozumiem.

A co tu za wymówka jest potrzebna, może posłużyć np. do autoryzowanego uruchomienia robota. Bez karty np. nie załączysz zasilania lub coś takiego, jakiś prosty system identyfikacyjny.

dokładnie tak jak napisał kolega regrom, to taki gadżet który bardzo chciałbym mieć, a wracając do tematu to jeszcze się uczę i niewiem jak odbierać te dane przez port szeregowy rs232, a nie mogę nic znaleźć gdzie to jest jasno wyjaśnione. Pomoże ktoś?

mam jeszcze taki kod ale niewiem czy to będzie działało do tego modułu który jest podany w linku w pierwszym moim poście, proszę o sprawdzenie (głównie czy odbiór danych jest poprawnie obsłużony bo ten kod nie jest mój i niewiele z niego rozumiem.

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

//zmienne uzywane przy obsludze protokolu MODBUS
volatile int bitstart, bitstop, licznik, k;
unsigned char byte;
volatile char *ramkaodbierz;

//struktura przetworzonej ramki
struct ramka {
char adres;
char funkcja;
char *dane;
char LRC;
} przetworzonaRamka;

int main(void) // procedura glowna
{
LCD_init(); // inicjalizacja wyswietlacza
LCD_clear();
LCD_putstr_P(PSTR("wait.."));

//inicjalizacja portu szeregowego

UCSRC=(1<<URSEL) | (1<<UPM1) | (1<<UCSZ1) | (1<<UCZSZ0);
UBRL=51; //predkosc 9600 przy kwarcu 8MHz
UCSRB = (1 << RXCIE) | (1 << RXEN) | (1 << TXEN);

// ustawienia portu B
DDRB=0xff;
PORTB=0xff;

while(1)
{
//wyliczenie LRC otrzymanej wiadomosci
static unsigned char LRC(auchMsg, usDataLen)
unsigned char *auchMsg; //ramka do obliczenia
unsigned short usDataLen; //dlugosc liczenia
{
unsigned char uchLRC=0; //wyzerowanie

k=0; //indeks k=0
while (usDataLen--) {
k++ //zwiekszenie indeksu
uchLRC+=auchMsg[k]; //sumowanie kolejnych bajtow wiadomosci
}
return ((unsigned char)(-((char)uchLRC))); //zamiana na u2 i zwrot do funkcji
}

//przerwanie generowane po zakonczeniu odbioru
SIGNAL (SIG_UART_RECV)
{

byte = UDR; //pobranie wartosci z rejestru UDR

//sprawdzenie czy wystapil znak startu ":" 3A (hex)
if (byte==0x3A){
bitstart=1; bitstop=0; //ustawienie odpowiednio bitow
LCD_clear();
LCD_putstr_p(PSTR("start "));
licznik=0; }

licznik++; //licznik indeksujacy

//sprawdzenie czy nie wystapil znak konca "CR" lub "LF"
if (((byte==0x0D) || (byte=0x0A)) &&(bitstart==1))
{
bitstop=1; bitstart=0;
LCD_clear();
LCD_putstr_P(PSTR("GOTOWE: "));

wykonaj(ramkaodbierz, licznik);

//inkrementowanie tablicy char ramkaodbierz
if (bitstart==1) {
ramkaodbierz[licznik]=byte;
}

//wyswietlenie na LCD odbieranych bajtow
if ((byte!=0x0D) && byte!=0x0A) && (byte!=0x3A)) {
LCD_puthhexu08(byte);
}

}//koniec obslugi przerwania
}//koniec while(1)
} //koniec main

Jest ok, tylko jest mnóstwo dla Ciebie zbędnych rzeczy, służących do obsługi MODBUS'a. Tak naprawdę wystarczy

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


volatile unsigned char byte; 

int main(void) // procedura glowna 
{ 


//inicjalizacja portu szeregowego 

UCSRC=(1<<URSEL) | (1<<UPM1) | (1<<UCSZ1) | (1<<UCZSZ0); 
UBRL=51; //predkosc 9600 przy kwarcu 8MHz 
UCSRB = (1 << RXCIE) | (1 << RXEN) | (1 << TXEN); 


while(1) 
{ 
//coś tam
} 
}

//przerwanie generowane po zakonczeniu odbioru 
SIGNAL (SIG_UART_RECV) 
{ 
byte = UDR; //pobranie wartosci z rejestru UDR 
}

Zwróć uwagę, że zmienna do której będziesz zapisywał dane musi być volatile,

Ok tylko ja chciałbym aby program odczytał dane wysyłane przez czytnik i skopiował je do tablicy a następnie zawartość tej tablicy wyświetlił na wyświetlaczu, to znaczy z wyświetlaczem chyba sobie poradzę tylko niewiem jak te dane skopiować, podpowie ktoś? A co to jest to byte?

A co to jest to byte?

Widzę że z Elektrody przeniosłeś się na Diodę i nadal nie posunąłęś się do przodu.

Teraz już wiem dlaczego skoro zadajesz tak pierwotne pytanie.

Proponuję Ci, abyś zaczął od kupna jakiejś porządnej książki.

no myślałem o tym ale niewiem którą najlepiej wybrać żeby było opisane w zrozumiały sposób i poparte wieloma przykładami.

byxu, raczej wątpię. To jest pozycja stosunkowo nowa sprzedawana chyba wyłącznie on-line przez jej autora (którego można również spotkać na Diodzie) 😉

  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...