ggg — Arduino Mega simulation

An interactive Arduino Mega circuit simulation you can run free in your browser on Velxio, by mshuapac.

Components

Sketch code

#include <avr/io.h>
#include <stdint.h>

int main(void)
{
    DDRL = 0xff;
    PORTL = 0x80;

    uint8_t licznik = 0;
    uint8_t dioda = 0x01;

    // TIMER1 - CTC, 250 ms
    TCCR1A = 0;
    TCCR1B = 0;

    TCNT1 = 0;
    OCR1A = 15625 - 1;

    TIFR1 = (1 << OCF1A);

    TCCR1B = (1 << CS12) | (1 << WGM12);

    // TIMER0 - NORMAL, 4 ms
    TCCR0A = 0;
    TCCR0B = 0; // Zatrzymany

    TCNT0 = 256 - 250;
    TIFR0 = (1 << TOV0);

    while(1)
    {
        // Co 250 ms
        if(TIFR1 & (1 << OCF1A))
        {
            TIFR1 = (1 << OCF1A);

            // Przygotowanie Timera0
            TCCR0B = 0;
            TCNT0 = 256 - 250;
            TIFR0 = (1 << TOV0);
            licznik = 0;

            // Zapal kolejna diode
            PORTL = dioda;

            // Przygotuj maske nastepnej diody
            dioda >> 1;

            if(dioda == 255)
            {
                dioda = 0x80;
            }

            // Uruchom Timer0, preskaler 256
            TCCR0B = (1 << CS02);
        }

        // Co okolo 4 ms
        if(TIFR0 & (1 << TOV0))
        {
            TIFR0 = (1 << TOV0);
            licznik++;

            if(licznik >= 5)
            {
                TCCR0B = 0;  // Zatrzymaj Timer0
            }
            else
            {
                TCNT0 = 256 - 250;
            }
        }
    }
}