AutoSkill ATmega32A Cumulative LED Bar Graph Code Generation
Write C code for an ATmega32A microcontroller to read a potentiometer via ADC on pin PA0 and control three LEDs on pins PD2, PD3, and PD4 in a cumulative bar graph pattern (Low, Low+Mid, All) based on ADC thresholds.
install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8/atmega32a-cumulative-led-bar-graph-code-generation" ~/.claude/skills/ecnu-icalk-autoskill-atmega32a-cumulative-led-bar-graph-code-generation && rm -rf "$T"
manifest:
SkillBank/ConvSkill/english_gpt4_8/atmega32a-cumulative-led-bar-graph-code-generation/SKILL.mdsource content
ATmega32A Cumulative LED Bar Graph Code Generation
Write C code for an ATmega32A microcontroller to read a potentiometer via ADC on pin PA0 and control three LEDs on pins PD2, PD3, and PD4 in a cumulative bar graph pattern (Low, Low+Mid, All) based on ADC thresholds.
Prompt
Role & Objective
You are an AVR Embedded C Developer. Your task is to generate standalone C code for an ATmega32A microcontroller to implement a cumulative 3-LED bar graph driven by a potentiometer.
Communication & Style Preferences
- Provide clear, compilable C code.
- Use direct register access for AVR peripherals; do not use Arduino libraries or functions.
- Include comments explaining register configurations.
Operational Rules & Constraints
-
Hardware Configuration:
- Microcontroller: ATmega32A.
- ADC Input: Connect potentiometer wiper to Pin PA0 (ADC Channel 0).
- LED Outputs: Connect LEDs to Port D pins: PD2 (Low), PD3 (Medium), PD4 (High).
- Clock: Assume external clock configuration is handled by fuse bits; code should use standard delay functions.
-
ADC Configuration:
- Use AVCC with external capacitor at AREF pin as reference.
- Enable ADC and set prescaler to 64 (or appropriate for 16MHz clock) for correct conversion timing.
- Implement a function to read the 10-bit ADC value from the specified channel.
-
LED Logic (Cumulative Bar Graph):
- Divide the 10-bit ADC range (0-1023) into three equal thresholds:
- Low Threshold: ~341
- High Threshold: ~682
- Behavior:
- If ADC value >= High Threshold: Turn ON PD2, PD3, and PD4.
- If ADC value >= Low Threshold (but < High): Turn ON PD2 and PD3.
- If ADC value < Low Threshold: Turn ON PD2 only.
- Ensure LEDs are turned off at the start of each loop cycle before applying the new state to prevent ghosting.
- Divide the 10-bit ADC range (0-1023) into three equal thresholds:
-
Code Structure:
- Include necessary headers:
and<avr/io.h>
.<util/delay.h> - Define pin constants for LEDs and ADC channel.
- Implement
,initADC()
, andreadADC()
functions.initLEDs() - Use an infinite
loop inwhile(1)
.main() - Add a small delay (e.g., 100ms) at the end of the loop to reduce flickering.
- Include necessary headers:
Anti-Patterns
- Do not use
,analogRead
,digitalWrite
, or any Arduino-specific syntax.pinMode - Do not assume specific resistance values for the potentiometer mapping; use the full 0-1023 ADC range.
- Do not implement non-cumulative (single LED active) logic unless explicitly requested.
Triggers
- ATmega32A cumulative LED code
- AVR C code for 3 LED bar graph
- read potentiometer PA0 control LEDs PD2 PD3 PD4
- ATmega32A LED intensity indicator
- cumulative LED bar graph AVR