diff --git a/20231102/inttypes-03.txt b/20231102/inttypes-03.txt new file mode 100644 index 0000000000000000000000000000000000000000..1e5fbae5ad7906da2ca56da10c0e0c98078defbe --- /dev/null +++ b/20231102/inttypes-03.txt @@ -0,0 +1,21 @@ +2^14 ist nicht "2 hoch 14", sondern "2 xor-verknüpft mit 14". +Wie rechnet man das aus? + +Binär rechnen: + 14 = 15 - 1 = 1111 - 0001 = 1110 + (dezimal) (binär) + + 2 = 10 + (dezimal) (binär) + + 0010 +^ 1110 + ---- + 1100 + +Alternative: 2^14 ist dasselbe wie 14^2 + + 1110 +^ 0010 <-- dieses eine Bit umklappen, die anderen beibehalten + ---- + 1100 diff --git a/20231109/blink-0.c b/20231109/blink-0.c new file mode 100644 index 0000000000000000000000000000000000000000..b0022c681fd1482ed0a6d9fded7bb0a54699de32 --- /dev/null +++ b/20231109/blink-0.c @@ -0,0 +1,9 @@ +#include <avr/io.h> + +int main (void) +{ + DDRD = 0x40; /* binär: 0100 0000 */ + PORTD = 0x40; /* binär: 0100 0000 */ + while (1); + return 0; +} diff --git a/20231109/blink-0.hex b/20231109/blink-0.hex new file mode 100644 index 0000000000000000000000000000000000000000..6a05b7db67b71fe56b83474cab2ab278834e3777 --- /dev/null +++ b/20231109/blink-0.hex @@ -0,0 +1,10 @@ +:100000000C9434000C943E000C943E000C943E0082 +:100010000C943E000C943E000C943E000C943E0068 +:100020000C943E000C943E000C943E000C943E0058 +:100030000C943E000C943E000C943E000C943E0048 +:100040000C943E000C943E000C943E000C943E0038 +:100050000C943E000C943E000C943E000C943E0028 +:100060000C943E000C943E0011241FBECFEFD8E04C +:10007000DEBFCDBF0E9440000C9444000C940000F1 +:0C00800080E48AB98BB9FFCFF894FFCF61 +:00000001FF diff --git a/20231109/blink-0a.c b/20231109/blink-0a.c new file mode 100644 index 0000000000000000000000000000000000000000..97eb849a15eaf8b931d07a2378246ed0d98469d9 --- /dev/null +++ b/20231109/blink-0a.c @@ -0,0 +1,9 @@ +#include <avr/io.h> + +int main (void) +{ + DDRD = 0xff; /* binär: 1111 1111 */ + PORTD = 0x42; /* binär: 0100 0010 */ + while (1); + return 0; +} diff --git a/20231109/blink-1.c b/20231109/blink-1.c new file mode 100644 index 0000000000000000000000000000000000000000..6d28dce84f94375094c98479c30a54ace1b2a9d9 --- /dev/null +++ b/20231109/blink-1.c @@ -0,0 +1,18 @@ +#include <avr/io.h> + +#define F_CPU 16000000l +#include <util/delay.h> + +int main (void) +{ + DDRD = 0x01; + PORTD |= 0x01; + while (1) + { + _delay_ms (500); + PORTD &= ~0x01; + _delay_ms (500); + PORTD |= 0x01; + } + return 0; +} diff --git a/20231109/blink-2.c b/20231109/blink-2.c new file mode 100644 index 0000000000000000000000000000000000000000..9389b19b1bf46d5ca90bac823e3f94269fe02878 --- /dev/null +++ b/20231109/blink-2.c @@ -0,0 +1,16 @@ +#include <avr/io.h> + +#define F_CPU 16000000l +#include <util/delay.h> + +int main (void) +{ + DDRD = 0x02; /* binär: 0000 0010 */ + PORTD = 0x02; + while (1) + { + _delay_ms (250); + PORTD ^= 0x02; + } + return 0; +} diff --git a/20231109/blink-3.c b/20231109/blink-3.c new file mode 100644 index 0000000000000000000000000000000000000000..5268e7977f0f2a99b2005a81a2fa7560dfea481f --- /dev/null +++ b/20231109/blink-3.c @@ -0,0 +1,17 @@ +#include <avr/io.h> + +#define F_CPU 16000000 +#include <util/delay.h> + +int main (void) +{ + DDRD = 0x01; + PORTD = 0x01; + while (1) + { + while ((PIND & 0x02) == 0) + ; /* just wait */ + PORTD ^= 0x01; + } + return 0; +} diff --git a/20231109/blink-4.c b/20231109/blink-4.c new file mode 100644 index 0000000000000000000000000000000000000000..ceafab6b1e7462497fde98b7a12e72cc34132bbe --- /dev/null +++ b/20231109/blink-4.c @@ -0,0 +1,18 @@ +#include <avr/io.h> + +#define F_CPU 16000000 +#include <util/delay.h> + +int main (void) +{ + DDRD = 0x01; /* binär: 0000 0001 */ + PORTD = 0x01; /* ^ Ouptut */ + while (1) /* ^ Input */ + { + while ((PIND & 0x02) == 0) /* binär: 0000 0010 */ + ; /* just wait */ + PORTD ^= 0x01; + _delay_ms (200); + } + return 0; +} diff --git a/20231109/blink-5.c b/20231109/blink-5.c new file mode 100644 index 0000000000000000000000000000000000000000..bb755f0de02d3e224909f1d2a37789f3c14a0f03 --- /dev/null +++ b/20231109/blink-5.c @@ -0,0 +1,19 @@ +#include <avr/io.h> +#include <avr/interrupt.h> + +ISR (TIMER0_COMPB_vect) +{ + PORTD ^= 0x40; +} + +int main (void) +{ + cli (); + TCCR0B = (1 << CS01) | (1 << CS00); /* Takt durch 64 dividieren */ + TIMSK0 = 1 << OCIE0B; /* Interrupt einschalten */ + sei (); + DDRD = 0xfd; /* binär: 1111 1101 */ + PORTD = 0x40; /* binär: 0100 0000 */ + while (1); + return 0; +} diff --git a/20231109/blink-6.c b/20231109/blink-6.c new file mode 100644 index 0000000000000000000000000000000000000000..651ab6e4ac926242337a0520c11f2bbd935bdd22 --- /dev/null +++ b/20231109/blink-6.c @@ -0,0 +1,22 @@ +#include <avr/io.h> +#include <avr/interrupt.h> +#include <stdint.h> + +ISR (TIMER0_COMPB_vect) +{ + static uint8_t counter = 0; + if (counter++ == 0) + PORTD ^= 0x40; +} + +int main (void) +{ + cli (); + TCCR0B = (1 << CS01) | (1 << CS00); /* Takt durch 64 dividieren */ + TIMSK0 = 1 << OCIE0B; /* Interrupt einschalten */ + sei (); + DDRD = 0xfd; /* binär: 1111 1101 */ + PORTD = 0x40; /* binär: 0100 0000 */ + while (1); + return 0; +} diff --git a/20231109/blink-7.c b/20231109/blink-7.c new file mode 100644 index 0000000000000000000000000000000000000000..7ed39822752f61b636f001b77eb3742a57e953a9 --- /dev/null +++ b/20231109/blink-7.c @@ -0,0 +1,20 @@ +#include <avr/io.h> +#include <avr/interrupt.h> +#include <stdint.h> + +ISR (INT0_vect) /* PD2 */ +{ + PORTD ^= 0x40; +} + +int main (void) +{ + cli (); + EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */ + EIMSK = 1 << INT0; /* INT0 einschalten */ + sei (); + DDRD = 0xfb; /* binär: 1111 1011 */ + PORTD = 0x40; /* binär: 0100 0000 */ + while (1); + return 0; +} diff --git a/20231109/blink-8.c b/20231109/blink-8.c new file mode 100644 index 0000000000000000000000000000000000000000..aba94f07176a75656619d1ba09e83093cbc66c89 --- /dev/null +++ b/20231109/blink-8.c @@ -0,0 +1,20 @@ +#include <avr/io.h> +#include <avr/interrupt.h> +#include <stdint.h> + +ISR (INT0_vect) /* PD2 */ +{ + PORTD ^= 0x40; +} + +int main (void) +{ + cli (); + EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */ + EIMSK = 1 << INT0; /* INT0 einschalten */ + sei (); + DDRD = 0xff; /* binär: 1111 1111 */ + PORTD = 0x40; /* binär: 0100 0000 */ + while (1); + return 0; +} diff --git a/20231109/blink-8a.c b/20231109/blink-8a.c new file mode 100644 index 0000000000000000000000000000000000000000..ec3b257372dce0c515ba910a01f05288d67a2ef8 --- /dev/null +++ b/20231109/blink-8a.c @@ -0,0 +1,25 @@ +#include <avr/io.h> +#include <avr/interrupt.h> +#include <stdint.h> + +#define F_CPU 16000000l +#include <util/delay.h> + +ISR (INT0_vect) /* PD2 */ +{ + PORTD ^= 0x40; + _delay_ms (1); /* Wartezeit zum Entprellen. --> HIER FALSCH! */ + /* Warteschleifen gehören nicht in einen Interrupt-Handler! */ +} + +int main (void) +{ + cli (); + EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */ + EIMSK = 1 << INT0; /* INT0 einschalten */ + sei (); + DDRD = 0xff; /* binär: 1111 1111 */ + PORTD = 0x40; /* binär: 0100 0000 */ + while (1); + return 0; +} diff --git a/20231109/blink-9.c b/20231109/blink-9.c new file mode 100644 index 0000000000000000000000000000000000000000..4a75df075eb4aed8b23333b640a0b33aa40b9da4 --- /dev/null +++ b/20231109/blink-9.c @@ -0,0 +1,32 @@ +#include <avr/io.h> +#include <avr/interrupt.h> +#include <stdint.h> + +#define F_CPU 16000000l +#include <util/delay.h> + +uint8_t key_pressed = 0; + +ISR (INT0_vect) /* PD2 */ +{ + key_pressed = 1; +} + +int main (void) +{ + cli (); + EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */ + EIMSK = 1 << INT0; /* INT0 einschalten */ + sei (); + DDRD = 0xfb; /* binär: 1111 1011 */ + PORTD = 0x44; /* binär: 0100 0100 */ + while (1) + { + while (!key_pressed) + ; /* just wait */ + PORTD ^= 0x40; + _delay_ms (1); /* Wartezeit zum Entprellen */ + key_pressed = 0; + } + return 0; +} diff --git a/20231109/blink-9.s b/20231109/blink-9.s new file mode 100644 index 0000000000000000000000000000000000000000..43555b93ac0c0a8280ac3a0411d6c0b3462e9873 --- /dev/null +++ b/20231109/blink-9.s @@ -0,0 +1,84 @@ + .file "blink-9.c" +__SP_H__ = 0x3e +__SP_L__ = 0x3d +__SREG__ = 0x3f +__tmp_reg__ = 0 +__zero_reg__ = 1 + .text +.global __vector_1 + .type __vector_1, @function +__vector_1: + push r1 + push r0 + in r0,__SREG__ + push r0 ; #include <avr/io.h> + clr __zero_reg__ ; #include <avr/interrupt.h> + push r24 ; #include <stdint.h> +/* prologue: Signal */ ; +/* frame size = 0 */ ; #define F_CPU 16000000l +/* stack size = 4 */ ; #include <util/delay.h> +.L__stack_usage = 4 ; + ldi r24,lo8(1) ; uint8_t key_pressed = 0; + sts key_pressed,r24 ; +/* epilogue start */ ; ISR (INT0_vect) /* PD2 */ + pop r24 ; { + pop r0 ; key_pressed = 1; + out __SREG__,r0 ; } + pop r0 ; + pop r1 ; int main (void) + reti ; { + .size __vector_1, .-__vector_1 ; cli (); + .section .text.startup,"ax",@progbits ; EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */ +.global main ; EIMSK = 1 << INT0; /* INT0 einschalten */ + .type main, @function ; sei (); +main: ; DDRD = 0xfb; /* binär: 1111 1011 */ +/* prologue: function */ ; PORTD = 0x44; /* binär: 0100 0100 */ +/* frame size = 0 */ ; while (1) +/* stack size = 0 */ ; { +.L__stack_usage = 0 ; while (!key_pressed) +/* #APP */ ; ; /* just wait */ + ; 17 "blink-9.c" 1 ; PORTD ^= 0x40; + cli ; _delay_ms (1); /* Wartezeit zum Entprellen */ + ; 0 "" 2 ; key_pressed = 0; +/* #NOAPP */ ; } + ldi r24,lo8(3) ; return 0; + sts 105,r24 ; } + ldi r24,lo8(1) + out 0x1d,r24 +/* #APP */ + ; 20 "blink-9.c" 1 + sei + ; 0 "" 2 +/* #NOAPP */ + ldi r24,lo8(-5) + out 0xa,r24 + ldi r24,lo8(68) + out 0xb,r24 + ldi r25,lo8(64) +.L4: + lds r24,key_pressed + cpse r24,__zero_reg__ + rjmp .L7 +.L6: + rjmp .L6 +.L7: + in r24,0xb + eor r24,r25 + out 0xb,r24 + ldi r30,lo8(3999) + ldi r31,hi8(3999) +1: sbiw r30,1 + brne 1b + rjmp . + nop + sts key_pressed,__zero_reg__ + rjmp .L4 + .size main, .-main +.global key_pressed + .section .bss + .type key_pressed, @object + .size key_pressed, 1 +key_pressed: + .zero 1 + .ident "GCC: (GNU) 5.4.0" +.global __do_clear_bss diff --git a/20231109/blink-9a.c b/20231109/blink-9a.c new file mode 100644 index 0000000000000000000000000000000000000000..f10f04d79023de40faa312ce2249de5fcd738337 --- /dev/null +++ b/20231109/blink-9a.c @@ -0,0 +1,32 @@ +#include <avr/io.h> +#include <avr/interrupt.h> +#include <stdint.h> + +#define F_CPU 16000000l +#include <util/delay.h> + +volatile uint8_t key_pressed = 0; + +ISR (INT0_vect) /* PD2 */ +{ + key_pressed = 1; +} + +int main (void) +{ + cli (); + EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */ + EIMSK = 1 << INT0; /* INT0 einschalten */ + sei (); + DDRD = 0xfb; /* binär: 1111 1011 */ + PORTD = 0x41; /* binär: 0100 0001 */ + while (1) + { + while (!key_pressed) + ; /* just wait */ + PORTD ^= 0x40; + _delay_ms (1); /* Wartezeit zum Entprellen */ + key_pressed = 0; + } + return 0; +} diff --git a/20231109/blink-9b.c b/20231109/blink-9b.c new file mode 100644 index 0000000000000000000000000000000000000000..efa19cc5c3ebcf87a652ed64bb33a48cd24e8561 --- /dev/null +++ b/20231109/blink-9b.c @@ -0,0 +1,32 @@ +#include <avr/io.h> +#include <avr/interrupt.h> +#include <stdint.h> + +#define F_CPU 16000000l +#include <util/delay.h> + +volatile uint8_t key_pressed = 0; + +ISR (INT0_vect) /* PD2 */ +{ + key_pressed = 1; +} + +int main (void) +{ + cli (); + EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */ + EIMSK = 1 << INT0; /* INT0 einschalten */ + sei (); + DDRD = 0xfb; /* binär: 1111 1011 */ + PORTD = 0x45; /* binär: 0100 0101 */ + while (1) + { + while (!key_pressed) + ; /* just wait */ + PORTD ^= 0x40; + _delay_ms (1); /* Wartezeit zum Entprellen */ + key_pressed = 0; + } + return 0; +} diff --git a/20231109/interner-pull-up-widerstand.png b/20231109/interner-pull-up-widerstand.png new file mode 100644 index 0000000000000000000000000000000000000000..9a99aad8b8895226e27f8495ba7fc0b31615e56d Binary files /dev/null and b/20231109/interner-pull-up-widerstand.png differ diff --git a/20231109/pull-down-pull-up-widerstaende.xcf.gz b/20231109/pull-down-pull-up-widerstaende.xcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..d1897978ccbf256d5034aa40b12f70977681f2d6 Binary files /dev/null and b/20231109/pull-down-pull-up-widerstaende.xcf.gz differ diff --git a/20231109/pull-down-widerstand.png b/20231109/pull-down-widerstand.png new file mode 100644 index 0000000000000000000000000000000000000000..0c18a6d0b6a4763237c579ee787b26065f753cbc Binary files /dev/null and b/20231109/pull-down-widerstand.png differ diff --git a/20231109/pull-up-widerstaende-1.png b/20231109/pull-up-widerstaende-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5d86ec33792a68fa9597c4bb326773b9f89db7 Binary files /dev/null and b/20231109/pull-up-widerstaende-1.png differ diff --git a/20231109/pull-up-widerstand.png b/20231109/pull-up-widerstand.png new file mode 100644 index 0000000000000000000000000000000000000000..70e8ca04da6eadf6a7e94715ec4ab296c1dcd394 Binary files /dev/null and b/20231109/pull-up-widerstand.png differ