Skocz do zawartości

Czytnik RFID + Atmega8


byxu

Pomocna odpowiedź

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.

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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,

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.