TECH 4234
Microprocessor Interface Technology
Fall 2022

Instructor Info

Daniel Kohn
Email: dekohn@memphis.edu
Office ET218
Phone: 678-4515
Office Hours

Course Info

Course Policies
GradeWatch Access

Assignment Submission

Submit Assignments

Required Text

The AVR Microcontroller and Embedded Systems Using Assembly and C: Using Arduino Uno and Atmel Studio by Sarmad Naimi and Muhammad Ali Mazidi 2nd Ed

Author's Website http://nicerland.com/

Previous Courses

TECH 3233 - Microprocessors
TECH 3812 - Digital Communications

Required Software

MicroChip Studio (Formerly Atmel Studio 7) - note: "Download Microchip Stuido button does not seem to work, scroll down to "Downloads and Documents"
Arduino IDE (for avrdude utility)
Putty

Course Outline:

DateTopicReadingHandoutsAssignments
Aug 23WelcomeReview Interrupts for Next Class Chp 10.3 and Lab 6

Review Synchronous Serial for next class
  
Aug 25Sync SerialSync Serial Fundamentals

PS2 Synchronous Serial Keyboard
Lecture
Review Chp 10
Lab #1 - Write a program to read a magnetic card (credit card). The data sheet for the card reader is available HERE. Info on the data format is available HERE. Most credit cards use ANSI/ISO BCD Data Format. CLICK HERE for a sample waveform.

For Procedure step 5, those in TECH 6234 must translate the card data into the card number, those in 4234 will get a bonus for doing it in their program, but can can also prove the data bits read from the card are correct by interpreting them by hand and turing the had interpretation in the the assignment.
Aug 30Work on Lab #1   
Sep 1|   
Sep 6    
Sep ?UART/USARTBasics of UART Communication

UART

Asynchronous Serial (Hackaday)
Uart Lecture
Chp 11
Lab #2
Sep 27SPIWhat could go wrong: SPI (Hackaday)

???

SPI Explained (Note code for different uProc)
Lecture NotesLab #3
     

Reference Links:

New MicroChip Website
ATmega328P Datasheet (new link)
ATmega328P / Arduino pinout
C Quick Reference

Tutorialspoint C Programming

VT100 Escape Codes

C Style Guides

Rigol Digital Oscilloscope - 2000 Series
• (note: to use USB Stick, it MUST be formatted as FAT32)

Arduino Ethernet Shield 2
WIZ5500 IC
Real Time Clock (BOB 12708)
16x2 SerLCD
ADXL345 Tripple Axis Accelerometer
Transceiver (nRF24L01+)
Wifi Module (ESP8266)
Bi-Directional Logic Level Converter


Info needed for Labs

Determine Com Port

With Arduino plugged in to computer's USB port
Win 10 - Search for "Powershell" and open
Type - "Get-WMIObject Win32_SerialPort" (no quotes)
check results for Arduino Uno (Com __ )

Atmel Studio

Setup Strings:

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe

-C "C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf" -p atmega328p -c arduino -P COM7 -b 115200 -U flash:w:"$(ProjectDir)Debug\$(TargetName).hex":i"

Atmel Studio add ins:

Microchip Gallery

Go to above link then search for "Microchip Gallery". Click on "Download" on left side of screen and run the downloaded file (if Atmel Studio was opened when you did this, close and reopen Atmel Studio). This should now allow Atmel Studio access to plugins (TOOLS | Extensions and Updates). It is suggested in go ahead and install "Terminal for Atmel Studio"

To get printf to work with floating point values:

Project | nameofproject Properties | Toolchain : AVR/GNU Linker | General | Check "Use vprintf library(-Wl,-u,vfprintf)"
Project | nameofproject Properties | Toolchain : AVR/GNU Linker | Miscellaneous | Other Linker Flags put into textbox | "-lprintf_flt" (leave off quotes).


For ATmega 2560

ATmega2560 Datasheet

2nd setup string:

-C "C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf" -p atmega2560 -c wiring -P COM3 -b 115200 -U flash:w:"$(ProjectDir)Debug\$(TargetName).hex":i"

Using Multiple Usarts:

When you start the project, pick the number of USARTS you need. In Each USART, change the mode to Async IRQ Mode and make sure you enable Printf support. You can adjust the RX and TX Buffer size to meet your needs.

at the start of you code (above atmel_start_init();) you will need to add the following line:

FILE USART_x_stream = FDEV_SETUP_STREAM(USART_x_write, USART_x_read, _FDEV_SETUP_RW);

where x is the USART number (you will need to add this line for EACH USART you wish to use 0-3).

to get characters:

fgetc(&USART_x_stream);

to print stuff:

fprintf(&USART_x_stream,"format",arg1,....);