Ćwiczenie nr 1 danie diody LED część 2

LABORATORIUM ELEKTRONIKI

INSTRUKCJA LABORATORYJNA

Temat: Badanie wyświetlaczy

LCD oraz LED.

Bielsko – Biała 2013

Badanie diod LED

Wyznaczenie charakterystyki diody LED w kierunku przewodzenia UF=f(IF).

Za pomocą potencjometru na zasilaczu zmieniać należy wartość napięcia zasilania Uz. Napięcie zmieniamy zgodnie z tabelą 1 ze skokiem 0.2V. Każda z diod ma inny próg graniczny napięcia zasilania po którym dioda zaczyna świecić. Za pomocą amperomierza odczytać należy prąd diody IF , natomiast za pomocą woltomierza odczytać należy napięcie na diodzie UF. Należy pamiętać, aby nie przekroczyć maksymalnego napięcia UFmax badanej diody.

Układ pomiarowy:

  1. Układ do pomiaru charakterystyki w kierunku przewodzenia diody LED.

Badane diody:

Ważne: Podczas wykonywania pomiarów nie przekroczyć prądu zasilania diody 15mA ponieważ może doprowadzić to do jej spalenia.

Tabela pomiarowa 1:

Próg świecenia IFmin UFmin IFmin UFmin IFmin UFmin IFmin UFmin IFmin UFmin
D1 D2 D3 D4 D5
Lp. Uz IF UF IF UF IF UF IF UF IF
V mA V mA V mA V mA V mA
1. 0
2. 0.5
3. 1.0
4. 1.2
5. 1.4
6. 1.6

II. Badanie wyświetlacza siedmiosegmentowego.

Wyznaczyć prąd napięcie na progu świecenia segmentu „e” oraz obliczyć moc pobieraną przez wskaźnik do zadowalającego świecenia wybranej cyfry.

Schemat pomiarowy:

  1. Schemat połączenia wyświetlacz siedmiosegmentowego.

Aby poprawnie wyświetlać cyfrę w miejsce zacisków połączonych czerwoną linią należy je zewrzeć lub w wpiąć amperomierz, w przeciwnym wypadku w miejscu tym jest rozwarcie połączenia.

Tabela 2. Tabela wyboru stanów na wejściach dla wyświetlenia poszczególnych cyfr:

Wypełnić wiersz „znak” zaznaczając od pola świecenia wskaźnika siedmiosegmentowego oraz wiersz „liczba dziesiętna” wpisując odpowiednią wartość wyświetlanej liczby dziesiętnej w tabeli 2. W celu określenia poprawnego działanie wskaźnika siedmiosegmentowego sterowanego przez układ UCY 7447 należy na wejścia A, B, C, D dekodera UCY 7447 podać stan niski lub wysoki zgodnie z tabelą 2.

Prąd i napięcie na progu świecenia segmentu :

Segment UF V IF mA
e

Obliczyć moc pobieraną przez wskaźnik do zadowalającego wyświetlania segmentu e:

"…" U = .............. , "…" I = .............., P = I ×U = .............. .

Wyznaczyć moc pobieraną przez wskaźnik siedmiosegmentowy dla następującego stanu wejść:

A -0 B-0 C-0 D-1:

"…" U = .............. , "…" I = .............., P = I ×U = .............. .

III. Programowanie wyświetlacza LCD 2x16.

Schemat połączenia mikrokontrolera ATMEGA16 z wyświetlaczem LCD:

  1. Schemat połączenia wyświetlacza LCD z mikrokontrolerem

  1. Schemat połączenia mikrokontrolera ATMEGA16 z programatorem USBasp.

Obsługa wyświetlacza LCD

Sterowanie wyświetlaczem odbywa się poprzez siedem linii we/wy mikrokontrolera:

Wyświetlacz programowany jest w trybie 4-bitowym (cztery linie danych), wyprowadzenia wyświetlacza D0, D1, D2 ,D3 nie będą wykorzystywane.

Podłączony rezystor R służy do zmiany kontrastu wyświetlacza.

Pakiet programów WinAVR zawiera podstawowe narzędzia do pisania programu, kompilacji języka C programu na kod maszynowy oraz sam programator, do tworzenia programów dla 8-bitowych mikroprocesorów AVR ATMEL. Program jest darmowy.

Pakiet programów WinAVR składa się z:

Program Sinaprog uważany jest za najbardziej wygodny w obsłudze. Posiada on funkcję automatycznego wyszukiwania rodzaju podłączonego mikrokontrolera. Pozwala na wygodną zmianę ustawień fuesbit’ów oraz lockbit’ów. Program nie wymaga instalowania. Jest bardzo prosty w obsłudze.

Sinaprog został użyty do przesłania programu do pamięci mikrokontrolera, ponieważ pakiet programów WinAVR nie ma wszystkich potrzebnych bibliotek do programowania użytego wyświetlacza 2x16.

Programowanie wyświetlacza LCD rozpocząć należy od utworzenia folderu – katalogu projektu np. LCD, w którym będą zapisywane programy oraz inne potrzebne pliki używane podczas programowania.

Skopiować należy do katalogu projektu LCD plik: hd44780.c, hd44780.h znajdujące się w folderze Wyświetlacz LCD. Plik hd44780.c zawiera definicje funkcji do obsługi wyświetlaczy, zaś w pliku hd44780.h znajdują się deklaracje tych funkcji, makrodefinicje przypisujące sygnały wyświetlacza do wybranych wyprowadzeń AVRa oraz kilka przydatnych makroinstrukcji.

Następnie należy uruchomić program MFile i ustawić parametry programowania w nim.

  1. Okno programu MFile.

  1. Wpisać nazwę projektu, nazwa projektu musi być taka sama jak nazwa programu zapisanego w Programmer Notepad:

Makefile » Main file name » lcd

  1. Wybrać mikrokontroler:

Makefile » MCU type » ATmega » atmega16.

  1. Wybrać typ programatora:

programator, który został użyty nie jest na liście dostępnych, dlatego należy dodać go ręcznie w następujący sposób:

Make file » Enable Editing of » następnie odszukać na stronie AVRDUDE_Programmer = stk500v2 i zamiast stk500v2 wpisać usbasp.

  1. Wybrać port do którego jest podłączony programator:

Makefile » Port » usb

  1. Wczytać potrzebne definicje funkcji do obsługi wyświetlaczy:

Make file » C/C++source files(s) » w okienku wpisać nazwę pliku: hd44780.c (nazwę pliku należy wpisać wraz z rozszerzeniem .c).

  1. Zmienić częstotliwość sygnału taktującego procesor:

częstotliwość należy zmienić ręcznie ponieważ nie ma takiej opcji w menu: Make file » Enable Editing of » następnie odszukać na stronie #Processor frequency i wpisać częstotliwość sygnału taktującego procesor F_CPU = 1000000

Częstotliwość można też zdefiniować podczas pisania programu na początku poprzez:

#define F_CPU 1000000UL

  1. Kończąc pracę należy zapisać parametry w folderze utworzonym na początku LCD, nie zmieniając nazwy podczas zapisywania musi zostać Makefile w przeciwnym wypadku mogą być problemy podczas kompilacji programu.

File » Save as » Makefile

Kolejnym etapem programowania wyświetlacza jest program Programmers Notepad służy do pisania programu oraz kompilacji na kod maszynowy.

Otworzyć należy program Programmers Notepad a następnie postępować zgodnie z punkami poniżej.

  1. Okno programu Programmers Notepad.

  1. Otworzyć należy nowy plik języka progrmownia C:

File » New » C/C++

  1. Napisać przykładowy program, który znajduje się poniżej lub skopiować go z folderu Wyświetlacz LCD zapisanego w notatniku pod nazwą: LCD1. Program służy wyświetlania słowa „Lukasz”.

  2. Zapisać program w wcześniej utworzonym folderze LCD, ważne jest aby nazwa miała rozszerzenie .c oraz musi być taka sama jak nazwa projektu w Makefile czyli lcd

File » Save as » lcd.c

  1. Kompilacja – zamiana języka programowania na kod maszynowy :

Tool » Make All

Zostanie utworzony plik lcd.hex w folderze projektu LCD

Jeśli wszystko zostało poprawnie wykonane w oknie Output zostanie wyświetlony komunikat:

„Process Exit Code: 0”

Następnie wysłać należy program do pamięci mikrokontrolera za pomocą programu SinaProg:

  1. Okno programu SinaProg

Przed wysłaniem programu należy ustawić parametry:

  1. W polu Hex file należy wybrać program do przesłania, wybrać należy go z folderu LCD plik lcd.hex

  2. W polu Device należy wybrać używany mikrokontroler czyli ATmega16.

  3. W polu Fuses częstotliwość taktowania najlepiej Int 1MHz.

  4. W polu Programmer wybrać należy używany programator czyli USBasp.

  5. Po wybraniu parametrów za pomocą ikony Program należy wysłać program do mikrokontrolera.

Przykładowy program do wyświetlania słowa „Lukasz”:

#define F_CPU 1000000UL

#include <avr/io.h>

#include <util/delay.h>

#include "hd44780.h"

int main(void)

{

/* Napisy przechowujemy w tablicach */

char str1[ ] = "Lukasz";

/* Funkcja inicjalizuje wyswietlacz */

lcd_init();

{

// Wlacza wyswietlanie z widocznym kursorem

LCD_DISPLAY(LCDDISPLAY|LCDCURSOR);

LCD_LOCATE(15,1);

LCD_CLEAR;

LCD_LOCATE(2,0);

//Funkcja lcd_puts wysyla do

//wyswietlacza ciag znakow

lcd_puts(str1);

_delay_ms(800);

LCD_LOCATE(1,0);

}

return 0;

}

Krótki opis funkcji użytych w programie.

Celem tego przykładu jest pokazanie w jaki sposób napisać cokolwiek na ekranie wyświetlacza z użyciem funkcji zapisanych w pliku hd44780.c

Na początku pliku programu należy wstawić polecenie preprocesora include dołączając plik hd44780.h zawierający deklaracje funkcji zdefiniowanych w pliku hd44780.c ma to wyglądać następująco:

#include "hd44780.h"

W kolejnym krokiem jest wywołanie funkcję lcd_init, funkcja ta realizuje procedurę programowej inicjalizacji wyświetlacza i następnie przełącza interfejs wyświetlacza do trybu 4-bitowego. Po wykonaniu funkcji lcd_init wyświetlacz zostaje wygaszony. Włączyć wyświetlanie można z pomocą makroinstrukcji LCD_DISPLAY:

/* Funkcja inicjalizuje wyświetlacz*/

lcd_init();

/* Włącza wyświetlanie */

LCD_DISPLAY(LCDDISPLAY);

Z pomocą makra LCD_LOCATE wskazać należy pozycje na ekranie wyświetlacza (kolumnę i wiersz), gdzie należy coś napisać. Kolumny i wiersze liczone są zaczynając od zera.

/* szósta kolumna, pierwszy wiersz */

LCD_LOCATE(5,0);

Pojedyncze znaki można wysyłać do wyświetlacza wykorzystując makro: LCD_WRITE_DATA

.

/* Wysyła do wyświetlacza jeden znak*/

LCD_WRITE_DATA('S');

Po wykonaniu LCD_WRITE_DATA numer kolumny zwiększa się o jeden, więc jeśli zostanie wysłane kilka znaków jeden za drugim, to zobaczyć można na ekranie wyświetlacza napis. Napisy (ciągi znaków zakończone zerem) można wysyłać do wyświetlacza funkcją lcd_puts. Funkcja lcd_puts po prostu wysyła do wyświetlacza znak po znaku cały napis wywołując w pętli makro LCD_WRITE_DATA. Jako argument funkcji lcd_puts wstawia się nazwę tabeli z tekstem lub stałą napisową.

/* Funkcja lcd_puts wysyła do wyświetlacza ciąg znaków */

lcd_puts(str1);

/* Jako argumentu funkcji można wstawić stałą napisową */

lcd_puts("Programy");

Makro LCD_CLEAR czyści cały ekran wyświetlacza i ustawia aktualny numer kolumny i wiersza na 0.

/* Czyści cały ekran */

LCD_CLEAR;

/* Włącza wyświetlanie i kursor */

LCD_DISPLAY(LCDDISPLAY|LCDCURSOR);

Plik hd44780.c zawiera zestaw funkcji do obsługi wyświetlacza.

#include<avr/io.h>

#include<util/delay.h>

#include "hd44780.h"

/*--------------------------------------------------------*/

/* Zapis danej lub instrukcji */

void WriteToLCD (unsigned char v,unsigned char rs)

{

SET_OUT_LCD_D4;

SET_OUT_LCD_D5;

SET_OUT_LCD_D6;

SET_OUT_LCD_D7;

if(v&0x10) SET_LCD_D4; else CLR_LCD_D4;

if(v&0x20) SET_LCD_D5; else CLR_LCD_D5;

if(v&0x40) SET_LCD_D6; else CLR_LCD_D6;

if(v&0x80) SET_LCD_D7; else CLR_LCD_D7;

CLR_LCD_E;

if(rs) SET_LCD_RS;else CLR_LCD_RS;

LCD_NOP;

SET_LCD_E;

LCD_NOP;

CLR_LCD_E;

LCD_NOP;

if(v&0x01) SET_LCD_D4; else CLR_LCD_D4;

if(v&0x02) SET_LCD_D5; else CLR_LCD_D5;

if(v&0x04) SET_LCD_D6; else CLR_LCD_D6;

if(v&0x08) SET_LCD_D7; else CLR_LCD_D7;

LCD_NOP;

SET_LCD_E;

LCD_NOP;

CLR_LCD_E;

LCD_NOP;

_delay_us(100);

}

/*---------------------------------------------------------*/

/* Inicjalizacja wyswietlacza */

void lcd_init(void)

{

_delay_ms(31);

SET_OUT_LCD_RS;

SET_OUT_LCD_E;

SET_OUT_LCD_D4;

SET_OUT_LCD_D5;

SET_OUT_LCD_D6;

SET_OUT_LCD_D7;

CLR_LCD_E;

CLR_LCD_RS;

SET_LCD_D4;

SET_LCD_D5;

CLR_LCD_D6;

CLR_LCD_D7;

LCD_NOP;

SET_LCD_E;

LCD_NOP;

CLR_LCD_E;

LCD_NOP;

delay_ms(10);

LCD_NOP;

SET_LCD_E;

LCD_NOP;

CLR_LCD_E;

LCD_NOP;

_delay_ms(2);

LCD_NOP;

SET_LCD_E;

LCD_NOP;

CLR_LCD_E;

LCD_NOP;

_delay_ms(2);

CLR_LCD_D4;

LCD_NOP;

SET_LCD_E;

LCD_NOP;

CLR_LCD_E;

LCD_NOP;

_delay_us(60);

WriteToLCD (0x28 , LCDCOMMAND) ;

_delay_us(60);

LCD_DISPLAY(0) ;

_delay_us(60);

LCD_CLEAR ;

_delay_ms(2);

LCD_ENTRY_MODE(LCDINCREMENT) ;

_delay_us(60);

}

/*--------------------------------------------------------*/

/* Wyswietla tekst na aktualnej pozycji kursora */

void lcd_puts(char *str)

{

unsigned char i =0;

while( str[i])

LCD_WRITE_DATA(str[i++]) ;

}

W pliku hd44780.h znajdują się deklaracje funkcji do obsługi wyświetlacza, makrodefinicje przypisujące sygnały wyświetlacza do wybranych wyprowadzeń AVRa oraz kilka przydatnych makroinstrukcji.

/*

Plik hd44780.h

*/

#ifndef LCD_HD44780

#define LCD_HD44780

#include<util/delay.h>

/* RS */

#define SET_OUT_LCD_RS DDRA |= _BV(PA5)

#define SET_LCD_RS PORTA |= _BV(PA5)

#define CLR_LCD_RS PORTA &= ~_BV(PA5)

/* E */

#define SET_OUT_LCD_E DDRA |= _BV(PA4)

#define SET_LCD_E PORTA |= _BV(PA4)

#define CLR_LCD_E PORTA &= ~_BV(PA4)

/* D4 */

#define SET_OUT_LCD_D4 DDRA |= _BV(PA3)

#define SET_LCD_D4 PORTA |= _BV(PA3)

#define CLR_LCD_D4 PORTA &= ~_BV(PA3)

/* D5 */

#define SET_OUT_LCD_D5 DDRA |= _BV(PA2)

#define SET_LCD_D5 PORTA |= _BV(PA2)

#define CLR_LCD_D5 PORTA &= ~_BV(PA2)

/* D6 */

#define SET_OUT_LCD_D6 DDRA |= _BV(PA1)

#define SET_LCD_D6 PORTA |= _BV(PA1)

#define CLR_LCD_D6 PORTA &= ~_BV(PA1)

/* D7 */

#define SET_OUT_LCD_D7 DDRA |= _BV(PA0)

#define SET_LCD_D7 PORTA |= _BV(PA0)

#define CLR_LCD_D7 PORTA &= ~_BV(PA0)

#define LCD_NOP asm volatile("nop\n\t""nop\n\t" "nop\n\t" "nop\n\t"::);

#define LCDCOMMAND 0

#define LCDDATA 1

#define LCD_LOCATE(x,y) WriteToLCD(0x80|((x)+((y)*0x40)), LCDCOMMAND); _delay_us(60)

#define LCD_CLEAR WriteToLCD(0x01, LCDCOMMAND); _delay_ms(2)

#define LCD_HOME WriteToLCD(0x02, LCDCOMMAND); _delay_ms(2)

/* IDS */

#define LCDINCREMENT 0x02

#define LCDDECREMENT 0x00

#define LCDDISPLAYSHIFT 0x01

#define LCD_ENTRY_MODE(IDS) WriteToLCD(0x04|(IDS), LCDCOMMAND); _delay_us(60)

/* BCD */

#define LCDDISPLAY 0x04

#define LCDCURSOR 0x02

#define LCDBLINK 0x01

#define LCD_DISPLAY(DCB) WriteToLCD(0x08|(DCB), LCDCOMMAND); _delay_us(60)

/* RL */

#define LCDLEFT 0x00

#define LCDRIGHT 0x04

#define LCD_SHIFT_DISPLAY(RL) WriteToLCD(0x18|(RL), LCDCOMMAND); _delay_us(60)

#define LCD_SHIFT_CURSOR(RL) WriteToLCD(0x10|(RL), LCDCOMMAND); _delay_us(60)

#define LCD_CGRAM_ADDRESS(A) WriteToLCD(0x40|((A)&0x3f), LCDCOMMAND); _delay_us(60)

#define LCD_DDRAM_ADDRESS(A) WriteToLCD(0x80|((A)&0x7f), LCDCOMMAND); _delay_us(60)

#define LCD_WRITE_DATA(D) WriteToLCD((D),LCDDATA)

void lcd_init(void);

void WriteToLCD(unsigned char v,unsigned char rs);

void lcd_puts(char *str);

#endif

III. Programowanie wyświetlacza zbudowanego z matryc LED.

Schemat połączenia mikrokontrolera ATMEGA8 z wyświetlaczem LED.

  1. Schemat połączenia mikrokontrolera ATMEGA8 z wyświetlaczem LED.

  1. Schemat połączenia mikrokontrolera ATMEGA8 z programatorem USBasp.

Obsługa wyświetlacza LED.

Matryce sterowane są za pośrednictwem mikrokontrolera Atmega8, który jest programowany poprzez programator USBasp.

Wyświetlanie na matrycy polega na zapalaniu i gaszeniu odpowiednich diod tak aby zapalone diody tworzyły żądane słowo, znak, hasło.

Pakiet programów WinAVR zawiera podstawowe narzędzia do pisania programu, kompilacji języka C programu na kod maszynowy oraz sam programator, do tworzenia programów dla 8-bitowych mikroprocesorów AVR ATMEL. Program jest darmowy.

Pakiet programów WinAVR składa się z:

Programowanie matryc LED rozpocząć należy od utworzenia folderu – katalogu projektu np. LED, w którym będą zapisywane programy oraz inne potrzebne pliki używane podczas programowania.

Skopiować należy do katalogu projektu LED plik: hc595.h znajdujące się w folderze Wyświetlacz LED. Plik hc595.h zawiera deklaracje użytych funkcji, oraz kilka przydatnych makroinstrukcji.

Następnie należy uruchomić program MFile i ustawić parametry programowania w nim.

  1. Okno programu MFile.

  1. Wpisać nazwę projektu, nazwa projektu musi być taka sama jak nazwa programu zapisanego w Programmer Notepad:

Makefile » Main file name » led

  1. Wybrać mikrokontroler:

Makefile » MCU type » ATmega » atmega8.

  1. Wybrać typ programatora:

programator, który został użyty nie jest na liście dostępnych, dlatego należy dodać go ręcznie w następujący sposób:

Make file » Enable Editing of » następnie odszukać na stronie AVRDUDE_Programmer = stk500v2 i zamiast stk500v2 wpisać usbasp.

  1. Wybrać port do którego jest podłączony programator:

Makefile » Port » usb

  1. Zmienić częstotliwość sygnału taktującego procesor:

częstotliwość należy zmienić ręcznie ponieważ nie ma takiej opcji w menu: Make file » Enable Editing of » następnie odszukać na stronie #Processor frequency i wpisać częstotliwość sygnału taktującego procesor F_CPU = 1000000

Częstotliwość można też zdefiniować podczas pisania programu na początku poprzez:

#define F_CPU 1000000UL

  1. Kończąc pracę należy zapisać parametry w folderze utworzonym na początku LCD, nie zmieniając nazwy podczas zapisywania musi zostać Makefile w przeciwnym wypadku mogą być problemy podczas kompilacji programu.

File » Save as » Makefile

Kolejnym etapem programowania wyświetlacza jest program Programmers Notepad służy do pisania programu oraz kompilacji na kod maszynowy.

Otworzyć należy program Programmers Notepad a następnie postępować zgodnie z punkami poniżej.

  1. Okno programu Programmers Notepad.

  1. Otworzyć należy nowy plik języka progrmownia C:

File » New » C/C++

  1. Napisać przykładowy program, który znajduje się poniżej lub skopiować go z folderu Wyświetlacz LED zapisanego w notatniku pod nazwą: LED1. Program służy wyświetlania słowa „Lukasz”.

  2. Zapisać program w wcześniej utworzonym folderze LCD, ważne jest aby nazwa miała rozszerzenie .c oraz musi być taka sama jak nazwa projektu w Makefile czyli lcd

File » Save as » led.c

  1. Kompilacja – zamiana języka programowania na kod maszynowy :

Tool » Make All

Zostanie utworzony plik program1.hex w folderze projektu LED.

Jeśli wszystko zostało poprawnie wykonane w oknie Output zostanie wyświetlony komunikat:

„Process Exit Code: 0”

  1. Wysłanie programu do pamięci mikrokontrolera:

Tools » Program

Uruchomiony zostaje program „avrdude” odczyta program program1.hex i zaprogramuje pamięć Flash układu atmega8.

Jeśli programowanie zakończy się pomyślnie to w oknie Output edytora pojawi się komunikat:

Process Exit Code: 0.

Przykładowy program.

/*

* program1

*

* Created: 2013-03-23 15:25:11

* Author: Lukasz

* Atmel Studio 6

* ATmega8A 8MHz

*/

#define F_CPU 800000UL // zegar 8MHz

#include <avr/io.h>

#include <util/delay.h>

#include "hc595.h" // makra

void write_to_HC595(char data);

const char bitmap[32] = {0b10000000, 0b00000000, 0b00001111, 0b00000011, // bitmapa do wyswietlenia

0b10100100, 0b10000001, 0b11101000, 0b01111011,

0b11000100, 0b10100101, 0b00101100, 0b00001011,

0b10000100, 0b10101001, 0b00100111, 0b00010011,

0b10000100, 0b10110001, 0b11100001, 0b00100011,

0b11110100, 0b10110001, 0b00101111, 0b01000000,

0b00000111, 0b10101001, 0b00100000, 0b01111011,

0b00000000, 0b00100100, 0b00000000, 0b00000011};

int main(void) {

char buf[32];

char i, row;

SET_OUT_PB0; // PB0 jako wyjscie ENABLE do modulu matryc LED

SET_OUT_PB1; // PB1 jako wyjscie CLK -//-

SET_OUT_PB2; // PB2 jako wyjscie DATA -//-

DDRD = 0xFF; // port D jako wyjscie podlaczone do wierszy ROW0-ROW7 modulu matryc LED

PORTD = 0x00; // zgas wszystkie wiersze

for (i = 0; i < 32; i++)

buf[i] = bitmap[i]; // teraz na obrazie znajdujacym sie w buf mozna

// wykonywac dowolne operacje

for (;;)

{

row = 0x01; // w row pierwszy wiersz (pierwsza od gory linia obrazu)

for (i = 0; i < 8; i++) { // poczatek procedury wyswietlajacej obraz

// powtorz w petli dla kazdej z 8-u linii obrazu

CLR_CLOCK; // ustaw odpowiednio piny sterujace ukladami

CLR_ENABLE; // HC595 modulu matryc LED

// kazda linia obrazu to 4 bajty, ktore trzeba wyslac do modulu

write_to_HC595(buf[i*4+3]); // wyslanie 3 bajtu obrazu i-tej linii

write_to_HC595(buf[i*4+2]); // wyslanie 2 bajtu obrazu i-tej linii

write_to_HC595(buf[i*4+1]); // wyslanie 1 bajtu obrazu i-tej linii

write_to_HC595(buf[i*4]); // wyslanie 0 bajtu obrazu i-tej linii

SET_ENABLE; // zatrzasnij dane w HC595 i wystaw na anody matryc LED

CLR_ENABLE;

PORTD = row; // wlacz i-ta linie obrazu (w row aktualny

// wiersz (0x01,0x02,0x04,...,0x40,0x80))

_delay_us(1250); // odczekaj 1250us (100Hz * 8wierszy = 800Hz -> 1250us)

PORTD = 0x00; // zgas wszystkie wiersze

row <<= 1; // teraz w row numer kolejnego wiersza

}

}

}

void write_to_HC595(char temp) // precedura wysylajaca 1 bajt linii obrazu do modulu LED

{

char i;

for (i = 0; i < 8; i++) // wysylaj 8 kolejnych bitow do DATA

{

if((temp & 0x80) != 0) // poczawszy od bitu MSB do LSB

SET_DATA; // bit 1

else

CLR_DATA; // bit 0

SET_CLOCK;

CLR_CLOCK;

temp <<= 1;

}

}

Krótki opis programu:

Najważniejsze w programie jest odpowiednie zapalanie diod tablica poniżej przedstawia jakie diody mają być zapalone w celu wyświetlenia słowa: „Lukasz”:

0b10100100, 0b10000001, 0b11101000, 0b01111011,

0b11000100, 0b10100101, 0b00101100, 0b00001011,

0b10000100, 0b10101001, 0b00100111, 0b00010011,

0b10000100, 0b10110001, 0b11100001, 0b00100011,

0b11110100, 0b10110001, 0b00101111, 0b01000000,

0b00000111, 0b10101001, 0b00100000, 0b01111011,

0b00000000, 0b00100100, 0b00000000, 0b00000011};

Aby było bardziej widoczne co przedstawia tablica poniżej pokazane jest to w kolorze:


Wyszukiwarka

Podobne podstrony:
Ćwiczenie nr 1. Badanie diody część 1, Semestr 4, Elektronika, Laboratorium
Ćwiczenie nr 7 ?danie przepływu cieczy przez poziome rurki
Ćwiczenie nr 6 ?danie generatorów sinusoidalnych
Sprawozdanie z cwiczenia nr 9, Część ćwiczeniowa:
Pomiar rezystancji metodą techniczną - ćwiczenie nr 42, Pwr MBM, Fizyka, sprawozdania vol I, sprawoz
Ćwiczenia nr 6 (2) prezentacja
cwiczenie nr 7F
cwiczenie nr 2
Ćwiczenie nr 4
cwiczenia nr 5 Pan Pietrasinski Nieznany
cwiczenia nr 7
Cwiczenie nr 8 Teksty id 99954
Cwiczenia nr 2 RPiS id 124688 Nieznany
Cwiczenia nr 10 (z 14) id 98678 Nieznany
Ćwiczenie nr 1 (Access 2007)
cwiczenie nr 8F
Cwiczenie nr 2 Rysowanie precyzyjne id 99901
Cwiczenia nr 1 z l Zepoloych do

więcej podobnych podstron