Table of Contents

Laboratorul 09 - Configurări

Cheatsheet

GPIO

Folosind GPIO (General-Purpose Input/Output) putem controla un pin al unui circuit integrat. De exemplu, putem aprinde un led folosind instrucțiuni AVR sau putem citi starea unui pin - LOW sau HIGH. Pinii ce suportă GPIO sunt grupați în porturi (grupuri de 8 pini logici numite A sau B) controlate de registre speciale (pe câte 8 biți):

  1. DDRx: Data Direction Register
    • un bit setat pe 0 indică faptul ca va fi folosit pentru 'citire'
    • un bit setat pe 1 indică 'scriere'
  2. PORTx: Data Register: (Stabilesc cum vreau să fie un pin)
    1. Dacă DDRx e setat ca ieșire ('scriere')
      • dacă un bit n este 0 atunci pinul respectiv va fi legat la LOW (GND)
      • dacă un bit n este 1 atunci pinul respectiv va fi legat la HIGH (VCC)
    2. Dacă DDRx e setat ca intrare ('citire')
  3. PINx: Data Input Register (Indică starea reală a unui pin)
    • daca un bit este 0 atunci pinul respectiv are valoarea LOW
    • daca un bit este 1 atunci pinul are valoare HIGH

În memoria microcontrollerului de la 0x00 la 0x3F gasim I/O Space. Aici se află toate registrele de lucru cu periferice și, desigur, DDRx, PORTx și PINx. De exemplu registrul PORTA are adresa 0x02.

Pentru a scrie citi date din I/O Space putem folosi instrucțiunile LDS/STS, însă recomandat este să folosim instrucțiunile speciale pentru lucru de memoria I/O Space ce se execută mai rapid:

Pentru a modifica un singur bit dintr-un registru de configurare putem folosi instrucțiunile SBI/CBI.

TIMER

INTRERUPERI

Exerciții

java -jar avrasm.jar input.txt output.txt

În scheletul de laborator veți găsi fișierul de constrângeri configurat astfel:

  • Port B mapat la primele 8 switch-uri din dreapta.
  • Port A mapat la primele 8 led-uri din dreapta.
  • Prescaler mapat pe primele 5 switch-uri din stânga, având valoarea selectată afișată în format binar pe ledurile corespunzătoare switch-urilor.
  • Cele 2 ieșiri ale Timer0 mapate pe LED-urile 8 și 9.

Task 01 (2p) Scrieți un program care setează portul A ca ieșire, portul B ca intrare, apoi, într-o buclă, citește valoarea de pe portul B și o scrie pe portul A. Folosiți tool-ul avrasm pentru a-l scrie în fișierul rom.v.

task01_skel.asm

task01_skel.asm

PINA        equ 0x00
DDRA        equ 0x01
PORTA       equ 0x02
PINB        equ 0x04
DDRB        equ 0x05
PORTB       equ 0x06
OCR0B       equ 0x15
OCR0A       equ 0x16
TCCR0B      equ 0x18
TCCR0A      equ 0x19
TIMSK       equ 0x26
 
rjmp        main            ; Adresa 0x0000
reti                        ; Adresa 0x0001
reti                        ; Adresa 0x0002
reti                        ; Adresa 0x0003
reti                        ; Adresa 0x0004
reti                        ; Adresa 0x0005
reti                        ; Adresa 0x0006
reti                        ; Adresa 0x0007
reti                        ; Adresa 0x0008
rjmp        TIM0_COMPA_ISR  ; Adresa 0x0009
reti                        ; Adresa 0x000A
reti                        ; Adresa 0x000B
reti                        ; Adresa 0x000C
reti                        ; Adresa 0x000D
reti                        ; Adresa 0x000E
reti                        ; Adresa 0x000F
reti                        ; Adresa 0x0010
 
main:
    loop:
        rjmp loop


Task 02 (3p) Extindeți programul de la punctul 1 astfel încât să configurați Timer0 folosind valoare introdusă folosind portul B pentru ajustarea factorului de umplere al modulării. Verificați comportamentul celor două ieșiri folosind LED-urile 8 și 9.

Task 03 (2p) Folosind semnalele de ieșire OC0A și OC0B ale Timer-ului configurat anterior controlați unul din LED-urile RGB pentru a obține culoarea verde. Atenție, nu priviți direct spre LED-urile RGB deoarece intensitatea acestora este ridicată.

Task 04 (3p) Modificați programul existent astfel încât să pe LED-urile legate la port A să afișați o bară de încărcare, adică să aprindeți pe rând de la dreapta la stânga (sau invers) fiecare LED.

Resurse

[0] Scheletul laboratorului

[1] Datasheet ATTiny20

[2] Setul de Instrucțiuni AVR

[3] Nexys A7 Reference Manual

[4] Solutii

[5] AVRASM