148kHz digitalWrite 50%
const byte LED_PIN = 8;
void setup(){
pinMode(LED_PIN, OUTPUT);
}
void loop(){
digitalWrite(LED_PIN, 1);
digitalWrite(LED_PIN, 0);
}
Używając rejestrów możemy wykonywać operacje na pinach w bardzo szybki sposób. Za pomocą 1 linii kodu możemy ustawić lub włączyć 8 różnych pinów.
2MHz PORTB OR AND 25%
const byte LED_PIN = 8;
void setup(){
DDRB = B00000001;
}
void loop(){
PORTB |= (1 << PB0);
PORTB &= ~(1 << PB0);
}
2.66MHz PORTB przypisanie 17%
const byte LED_PIN = 8;
void setup(){
DDRB = B00000001;
}
void loop(){
PORTB = B00000001;
PORTB = B00000000;
}
//odwracanie pinu za pomocą rejestru PINB 2.66Mhz duty 50%
void setup() {
DDRB |= (1 << PB0); // Ustawienie PB0 (D8) jako wyjście
while (1) {
PINB = (1 << PB0); // Odwrócenie stanu pinu PB0
}
}
4MHz PORTB while loop przypisanie 25%
const byte LED_PIN = 8;
void setup() {
DDRB = B00000001;
while (1) {
PORTB = B00000001;
PORTB = B00000000;
}
}
void loop() {
}
Użycie adresów zamiast makr dla rejestrów DDRB i PORTB
void setup() {
*(volatile uint8_t*)0x24 = B00000001;
}
int main() {
setup();
while (1) {
*(volatile uint8_t*)0x25 = B00000001;
*(volatile uint8_t*)0x25 = B00000000;
}
}