diff --git a/week2/Readme.md b/week2/Readme.md index d00dec7..8379eb5 100644 --- a/week2/Readme.md +++ b/week2/Readme.md @@ -32,3 +32,77 @@ An **H-bridge** is a circuit used to control the **direction** of a DC motor. It Because N-channel MOSFETs conduct easily when their **gate voltage is higher than the source**, they're ideal for **low-side switching**. High-side use may require **gate driver circuits** to boost voltage. --- +# πŸ”₯ Difference Between P-Channel and N-Channel MOSFETs + +MOSFETs (Metal-Oxide-Semiconductor Field-Effect Transistors) are used to switch and amplify electronic signals. +There are two main types: **N-Channel** and **P-Channel**. +Each has different behaviors and is suited to different roles in circuits. + +--- + +## 🧲 N-Channel MOSFET + +### πŸ” Characteristics: +- **Current flows** from **Drain to Source** when turned ON. +- **Turns ON** when the **Gate voltage (Vgs)** is **positive** relative to the Source. +- **Lower ON-resistance** (better conductivity) compared to P-Channel for the same size. +- **Preferred for switching low-side** (between load and ground). + +### βœ… Strengths: +- Higher efficiency +- Faster switching +- Lower cost (per performance level) + +### ❌ Weaknesses: +- Usually requires extra circuitry (like level shifters) when used for high-side switching (above the load). + +### 🧠 Common Uses: +- Low-side switches +- Buck converters +- Motor controllers (low-side drivers) + +--- + +## 🧲 P-Channel MOSFET + +### πŸ” Characteristics: +- **Current flows** from **Source to Drain** when turned ON. +- **Turns ON** when the **Gate voltage (Vgs)** is **negative** relative to the Source. +- **Typically higher ON-resistance** and **slower** compared to N-Channel MOSFETs. +- **Preferred for switching high-side** (between power source and load). + +### βœ… Strengths: +- Simplifies high-side switching (easy to control with low voltages) +- Useful when you need to disconnect the positive voltage rail. + +### ❌ Weaknesses: +- Less efficient (higher resistance) +- Larger physical size for the same current handling compared to N-Channel. + +### 🧠 Common Uses: +- High-side switches +- Power management circuits +- Battery protection circuits + +--- + +# ⚑ Quick Comparison Table + +| Feature | N-Channel | P-Channel | +|----------------------------|-----------------------------------|------------------------------------| +| Current Direction | Drain β†’ Source | Source β†’ Drain | +| Turn-On Condition (Vgs) | Positive | Negative | +| Efficiency | Higher | Lower | +| Typical Placement | Low-side (GND side) switching | High-side (VCC side) switching | +| Complexity for High-Side | Needs extra circuitry (bootstrap) | Simple control | + +--- + +# 🎯 Final Thoughts + +- **Use N-Channel** when you want **higher efficiency and lower cost**, especially on the low side. +- **Use P-Channel** when you need a **simple high-side switch** without complicated control circuitry. +- In many advanced designs, engineers prefer **two N-Channel MOSFETs** (with extra drivers) even for high-side switching to maximize efficiency. + +Choosing the right type depends on your circuit's needs! πŸš€ + diff --git a/week3/microcontrollers.md b/week3/microcontrollers.md new file mode 100644 index 0000000..0320679 --- /dev/null +++ b/week3/microcontrollers.md @@ -0,0 +1,262 @@ +# πŸ”₯ Overview of Common Microcontroller Families + +Microcontrollers (MCUs) are the tiny brains embedded in countless devices β€” from microwaves to drones. Different families of microcontrollers are optimized for different needs like power efficiency, performance, or ease of use. + +Below is a breakdown of some of the **most common microcontroller families** used in hobbyist, industrial, and commercial applications. + +--- + +## 🏠 AVR Family (by Atmel / Microchip) + +### πŸ” Overview: +- 8-bit RISC microcontrollers +- Known for simplicity and wide adoption in hobbyist communities (especially via Arduino) + +### βœ… Key Features: +- Low power consumption +- Easy to program (especially via Arduino IDE) +- Popular models: **ATmega328P** (Arduino Uno), **ATtiny85** + +### 🧠 Common Uses: +- Prototyping +- DIY electronics +- Basic automation and control systems + +--- + +## πŸ—οΈ ARM Cortex-M Family (by ARM Holdings) + +### πŸ” Overview: +- 32-bit processors licensed by ARM to many manufacturers (like STMicroelectronics, NXP, Nordic, Raspberry Pi) +- Offers a broad range of performance and power options (M0+, M3, M4, M7, M33) + +### βœ… Key Features: +- High performance at low power +- Rich set of peripherals (USB, CAN, Ethernet) +- Scalable across simple to high-end applications + +### 🧠 Common Uses: +- IoT devices +- Wearable tech +- Robotics and embedded systems + +--- + +## πŸ“‘ ESP Family (by Espressif Systems) + +### πŸ” Overview: +- Wi-Fi and Bluetooth-enabled microcontrollers, built for wireless communication and IoT. + +### βœ… Key Features: +- Built-in Wi-Fi and BLE (Bluetooth Low Energy) +- Affordable and powerful +- Models: **ESP8266**, **ESP32** + +### 🧠 Common Uses: +- Home automation +- Wireless sensors +- Cloud-connected devices + +--- + +## πŸ”Œ PIC Family (by Microchip) + +### πŸ” Overview: +- One of the oldest and most stable MCU lines; known for industrial robustness. + +### βœ… Key Features: +- Wide voltage and temperature ranges +- Available from 8-bit to 32-bit (PIC32) +- Rich in peripherals for timers, PWM, ADC + +### 🧠 Common Uses: +- Industrial controllers +- Automotive applications +- Consumer electronics + +--- + +## πŸ’Ύ MSP430 Family (by Texas Instruments) + +### πŸ” Overview: +- 16-bit microcontrollers optimized for ultra-low power consumption. + +### βœ… Key Features: +- Extremely low standby power draw +- Ideal for battery-powered systems +- Good selection of analog peripherals + +### 🧠 Common Uses: +- Smart meters +- Wearable health devices +- Portable instrumentation + +--- + +## 🧩 RP2040 Family (by Raspberry Pi) + +### πŸ” Overview: +- Raspberry Pi’s first custom silicon MCU, focused on flexibility and performance. + +### βœ… Key Features: +- Dual-core ARM Cortex-M0+ at 133MHz +- Unique Programmable I/O (PIO) blocks for custom hardware interfaces +- Affordable and widely available + +### 🧠 Common Uses: +- Prototyping and education +- IoT edge devices +- Hobbyist projects + +--- + +# πŸ” Quick Summary Table + +| Family | Architecture | Strengths | Typical Use | +|----------------|----------------|-----------------------------|---------------------------------| +| AVR | 8-bit | Simplicity, easy learning | DIY, education | +| ARM Cortex-M | 32-bit | Performance, flexibility | Industrial, IoT, robotics | +| ESP (ESP32) | 32-bit | Wireless communication | Home automation, IoT | +| PIC | 8/16/32-bit | Robustness, broad options | Automotive, industrial control | +| MSP430 | 16-bit | Ultra-low power | Battery-powered devices | +| RP2040 | 32-bit | Custom I/O, affordability | Prototyping, hobbyist projects | + +--- + +Each microcontroller family has carved out a niche depending on whether you need **low cost**, **low power**, **high connectivity**, or **processing power**. Choosing the right MCU depends heavily on your project's specific needs. πŸš€πŸ”§ + +--- +# πŸ”₯ Flashing and Programming an AVR Microcontroller (e.g., ATtiny) + +Flashing an AVR-based microcontroller like an **ATtiny** involves **uploading your compiled firmware (program)** into its memory so that it can run the code you wrote. + +Here's a step-by-step breakdown of the process: + +--- + +## 🧰 1. What You Need + +### Hardware: +- **ATtiny microcontroller** (e.g., ATtiny85, ATtiny84) +- **Programmer device** (examples): + - **USBasp** (popular and cheap) + - **AVRISP mkII** (official programmer) + - **Arduino-as-ISP** (use an Arduino Uno as a programmer) +- **Breadboard and jumper wires** (for prototyping) +- **Capacitors** (optional, for stability) + +### Software: +- **AVRDUDE** (command-line utility to communicate with AVR chips) +- **Arduino IDE** or **Atmel Studio** (for writing and compiling code) +- Optional: **AVR Programmer GUI** tools like **AVRDUDESS** (for easier use) + +--- + +## 🧩 2. Connect the Programmer to the ATtiny + +The key pins you must connect are based on the **ISP (In-System Programming)** protocol: + +| ATtiny Pin | Connects To | Purpose | +|------------|-------------|--------------------| +| VCC | 5V | Power | +| GND | Ground | Ground | +| RESET | Programmer | Reset control | +| MOSI | Programmer | Data input to MCU | +| MISO | Programmer | Data output from MCU| +| SCK | Programmer | Clock line | + +**Tip:** Double-check the ATtiny datasheet for the exact pinout (it varies between ATtiny models). + +--- + +## πŸ–₯️ 3. Install and Configure Your Software + +If using **Arduino IDE**: + +- Install **ATtiny Board Support** via the Boards Manager. +- Select: + - **Board**: ATtiny model (e.g., ATtiny85) + - **Clock**: Internal 8 MHz or whatever is appropriate + - **Programmer**: (e.g., "USBasp" or "Arduino as ISP") + +If using **AVRDUDE** directly: + +- Prepare a **HEX file** (compiled firmware). +- Use command-line commands to flash it. + +Example `avrdude` command: +```bash +avrdude -c usbasp -p t85 -U flash:w:your_program.hex:i +``` +Where: + +-c usbasp: Specifies the programmer type + +-p t85: Specifies the target device (ATtiny85) + +-U flash:w:your_program.hex:i: Write firmware to flash memory + +## πŸš€ 4. Flash (Upload) Your Program + +Once the setup is correct: + +Hit Upload in Arduino IDE + +Or run the AVRDUDE command manually + +The programmer will transfer the compiled program into the microcontroller’s flash memory. + +Success! πŸŽ‰ Your ATtiny will now start running your code. + +## πŸ› οΈ 5. (Optional) Burning Fuses + +Fuses configure low-level options like: + +Clock source (internal/external) + +Brown-out detection + +Watchdog timers + +Setting fuses incorrectly can "brick" the chip temporarily (you may need High-Voltage programming to recover it). + +In Arduino IDE: + +Use "Burn Bootloader" to set the fuses according to the clock configuration. + +In AVRDUDE: + +avrdude -c usbasp -p t85 -U lfuse:w:0xE2:m -U hfuse:w:0xDF:m +(Values depend on your needs.) + +## 🧠 Summary Workflow + +Connect the programmer to the ATtiny correctly. + +Write your code in Arduino IDE (or another environment). + +Compile and prepare the firmware. + +Upload (flash) the firmware using the programmer. + +(Optional) Set fuses if you need custom behavior. + +## ⚑ Quick Tips + +Double-check wiring β€” most flashing errors come from wrong connections! + +Ensure proper power β€” not all programmers supply 5V. + +Use a capacitor (10ΞΌF between RESET and GND on Arduino-as-ISP setups) to avoid auto-reset. + +Stay calm β€” AVR microcontrollers are resilient and recoverable! 🧘 + +## 🎯 Final Thoughts + +Programming an AVR chip like the ATtiny opens up a world of custom embedded possibilities. Once you get comfortable with flashing and fuse settings, you can create highly optimized, tiny, and efficient systems. + +It's a fantastic skill for hobbyists, engineers, and tinkerers alike. πŸš€ + +--- + +https://youtu.be/AL9vK_xMt4E?si=o2ikpwGOgRzlF3Wl