Initial commit with basic C code to write to pins.

This commit is contained in:
Marvin Blum
2017-03-09 23:30:15 +01:00
commit c358ee6a05
4 changed files with 84 additions and 0 deletions

9
compile Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/bash
mkdir build
avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o build/pins.o -Wall pins.c
avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o build/main.o -Wall main.c
avr-gcc -mmcu=atmega328p build/main.o build/pins.o -o build/main
avr-objcopy -O ihex -R .eeprom build/main build/main.hex
avrdude -F -V -c arduino -p ATMEGA328P -P $1 -b 57600 -U flash:w:build/main.hex
rm -r build

12
main.c Normal file
View File

@@ -0,0 +1,12 @@
#include <avr/io.h>
#include <util/delay.h>
#include "pins.h"
int main(){
while(1){
digitalWrite(5, HIGH);
_delay_ms(1000);
digitalWrite(5, LOW);
_delay_ms(1000);
}
}

53
pins.c Normal file
View File

@@ -0,0 +1,53 @@
#include "pins.h"
#include <avr/io.h>
const unsigned char LOW = 0x00;
const unsigned char HIGH = 0x01;
void digitalWrite(unsigned char pin, unsigned char value){
if(pin > 13){
return;
}
// TODO turn off pwm
if(pin < 8){
// pin 0-7
DDRD |= _BV(DDD0+pin);
if(value == HIGH){
PORTD |= _BV(DDD0+pin);
}
else{
PORTD &= ~_BV(DDD0+pin);
}
}
else{
// pin 8-13
DDRB |= _BV(DDB0+pin);
if(value == HIGH){
PORTB |= _BV(DDB0+pin);
}
else{
PORTB &= ~_BV(DDB0+pin);
}
}
}
void analogWrite(unsigned char pin, unsigned char value){
if(pin > 7){
return;
}
// TODO turn off pwm
DDRC |= _BV(DDC0+pin);
if(value == HIGH){
PORTC |= _BV(DDC0+pin);
}
else{
PORTC &= ~_BV(DDC0+pin);
}
}

10
pins.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef PINS_H_
#define PINS_H_
extern const unsigned char LOW;
extern const unsigned char HIGH;
void digitalWrite(unsigned char, unsigned char);
void analogWrite(unsigned char, unsigned char);
#endif