Lenard Wiedekamp, Leonard Göhrs
Werden gefräst oder 3D-Gedruckt
Umwandlung der 3D-Modelle in Produktionsdateien:
PYCode Werkzeugpfad in Python beschreiben und in GCode umwandeln
Enthält ATtiny85, Schutzbeschaltung, LEDs und einen Taster/ein Potentiometer
Wird von hinten in das Gehäuse gedrückt
b_rcvd>>=1;
if (RX_PIN & _BV(RX_NUM)) {
// Sender sent a high bit
b_rcvd|= _BV(7);
}
if (uart.flags.forward) {
// Forward the data bit if forwarding is requested
if (b_send & 0x01) TX_PORT|= _BV(TX_NUM);
else TX_PORT&= ~_BV(TX_NUM);
b_send>>=1;
}
Wie bei den Klötzen
Enthält ATmega328, Strombegrenzte Spannungsversorgung für die Klötze und ein Funkmodul
Spannungsversorgung über Steckernetzteil oder Batteriepack
"Das muss mehr reinballern"
- Leonard
Links: Spezifikation / Implementierung
Instr bits | Name | Description
------------+------------+------------
... | |
00 00 01 11 | SPJ | Perform the jump in the PC buffer
| |
00 00 10 XX | LD XX | Load next Byte into register XX a…
| |
00 01 00 XX | DEC XX | Decrement register XX by one
00 01 01 XX | INC XX | Increment register XX by one
00 01 10 XX | NOT XX | Bitwise NOT of Register XX
00 01 11 XX | SRR XX | Shift register right by one bit
... | |
LD RA // Load motor speed and direction
64 // Fwd 50%
LD RB // Load time to drive for
120 // Two seconds
STA Mot1 RA // Set Motor 1
STA Mot2 RA // Set Motor 2
STA Timer RB // Setup timer
loop:
LDA Timer RC // Read timer value
SEQ RZ RC // Skip next instruction if time is up
JBW loop // Loop
STA Mot1 RZ // Stop Motor 1
STA Mot2 RZ // Stop Motor 2
$ ./brkas.py source_in small.brkas bytecode_out small.brbc
$ hd small.brbc
00000000 09 40 0a 78 e1 e5 f2 d3 a3 31 e0 e4
Der grundliegende Umgang mit Arduino
Programmierung in der Arduinoumgebung
#!/bin/sh
avr-gcc -mmcu=atmega328p -DF_CPU=16000000L -ffunction-sections \
-fdata-sections -fno-caller-saves -Os -Wall -Wextra -pedantic \
-Werror -Wshadow -Wstrict-overflow \
-fno-strict-aliasing -std=c11 \
uart_example.c -o uart_example.elf
avrdude -v -patmega328p -c arduino -P /dev/cu.usbmodem1421 \
-b 115200 -D -U flash:w:uart_example.elf
#include <avr/io.h> //[..]
#define UA_TMR_PRESCALE_REG (_BV(CS01) | _BV(CS00)) //[..]
int main (void)
{
uart_init(); //[..]
for(;;){
//[..]
}
return (0);
}
commit 0df71ce5066dcfa8f88049d3dd0e514a56db26ab
Author: Leonard Göhrs leonard@goehrs.eu
Date: Thu May 26 11:38:07 2016 +0200
Simplified uart byte gap handling by not using overflow interrupt
commit 6c08c638a394d831478dbb182877980d20eac091
Author: Lenard Wiedekamp lenwdk@gmail.com
Date: Wed May 25 20:51:33 2016 +0200
Better active clock
static char *test_op_jfw()
{
struct vm_status_t vm;
uint8_t prog[]={0x44, 0x15, 0x24, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15};
// MOV RA RZ, INC RA, JFW 4, INC RA, INC RA, INC RA, INC RA, INC RA, INC RA
bzero(&vm, sizeof(vm));
vm.prog= prog;
vm.prog_len= sizeof(prog);
vm_run(&vm);
mu_assert("Something went wrong in program containing JFW",
vm.regs[0] == 3);
return 0;
}
$ make tests
gcc -ffunction-sections -fdata-sections -Os -Wall -Wextra \
-pedantic -Werror -Wshadow -Wstrict-overflow \
-fno-strict-aliasing -std=c11 \
-I ../ -o tests/tst-opcodes.test tests/tst-opcodes.c
./tests/tst-opcodes.test
ALL TESTS PASSED
Tests run: 10
rm tests/tst-opcodes.test
Alle Quelldateien stehen unter einer freien Lizenz zum Download bereit
Vortragsfolien:
leonard.goehrs.eu/etp