No changes between revisions
/Designs/Oscilloscope/SW/firmware/Makefile |
---|
0,0 → 1,33 |
PRG = scope |
OBJ = main.o ./libs/usart.o ./libs/spi.o |
MCU_TARGET = atmega8 |
AVRDUDE_PART = m8 |
OPTIMIZE = -O1 |
# OPTIMIZE = -Os |
CC = avr-gcc |
override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS) |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
all: hex |
./libs/spi.o: ./libs/spi.h |
./libs/usart.o: ./libs/usart.h |
#./libs/timer.o: ./libs/timer.h |
hex: $(PRG).hex |
%.hex: %.elf |
$(OBJCOPY) -j .text -j .data -O ihex $< $@ |
$(PRG).elf: $(OBJ) |
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) |
load: $(PRG).hex |
avrdude -p $(AVRDUDE_PART) -c stk500v2 -P /dev/ttyUSB1 -B 2 -U flash:w:$< |
clean: |
rm -rf *.o $(PRG).elf $(PRG).hex ./libs/*.o |
Property changes: |
Added: svn:executable |
/Designs/Oscilloscope/SW/firmware/libs/spi.c |
---|
0,0 → 1,20 |
#include "spi.h" |
#include <avr/io.h> |
void SPI_MasterInit(void) |
{ |
/* Enable SPI, Master, set clock rate fck/4, SCK high when idle, sample on rising */ |
// SPSR|= 0b00000001; //for fck/2 |
SPCR = 0b01011100; |
} |
char SPI_MasterTransmit(char cData) { |
/* Start transmission */ |
SPDR = cData; |
/* Wait for transmission complete */ |
while(!(SPSR & (1<<SPIF))) |
; |
return SPDR; |
} |
/Designs/Oscilloscope/SW/firmware/libs/spi.h |
---|
0,0 → 1,7 |
#ifndef SPI_H |
#define SPI_H |
void SPI_MasterInit(void); |
char SPI_MasterTransmit(char cData); |
#endif |
/Designs/Oscilloscope/SW/firmware/libs/usart.c |
---|
0,0 → 1,128 |
#include "usart.h" |
#include <avr/io.h> |
void USART_Init( unsigned int ubrr) |
{ |
/* Set baud rate */ |
UBRRH = (unsigned char)(ubrr>>8); |
UBRRL = (unsigned char)ubrr; |
/* flush transmitt register Double speed */ |
UCSRA = (1<<UDRE)|(1 << U2X); |
/* enable receiver interrupt and transmitter, pins forced */ |
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); |
/* Asynchronous, no parity, Set frame format: 8data, 1stop bit */ |
UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); |
} |
void USART_Transmit( unsigned char data ) |
{ |
while ( !( UCSRA & (1<<UDRE)) ); /* Wait for empty transmit buffer */ |
UDR = data; /* Put data into buffer, sends the data */ |
} |
void USART_Transmit_string( char *data ) |
{ |
while ( *data != 0 ) { |
USART_Transmit(*data); |
data++; |
} |
} |
void USART_Transmit_longnum(signed long data ) { |
unsigned char digits[10],i; |
if (data==0) |
USART_Transmit('0'); |
else { // PROZKOUMAT! |
if (data<0) { |
USART_Transmit('-'); |
data*=-1; |
} |
for (i=0;i<10;i++) { |
digits[i]=data%10; |
data=data/10; |
} |
i=9; |
while (digits[i]==0) i--; |
while (i>0) { |
USART_Transmit(digits[i]+48); |
i--; |
} |
USART_Transmit(digits[0]+48); |
} |
} |
void USART_Transmit_uint16 (unsigned int data ) { |
unsigned char digits[5],i; |
if (data==0) //podivne, ale nulu to odeslat neumi |
USART_Transmit('0'); |
else { |
for (i=0;i<5;i++) { |
digits[i]=data%10; |
data=data/10; |
} |
i=4; |
while (digits[i]==0) i--; |
while (i>0) { |
USART_Transmit(digits[i]+48); |
i--; |
} |
USART_Transmit(digits[0]+48); |
} |
} |
void USART_Transmit_num(unsigned char data ) { |
unsigned char a,b,c; |
c=data%10; |
data=data/10; |
b=data%10; |
data=data/10; |
a=data%10; |
USART_Transmit(a+48); |
USART_Transmit(b+48); |
USART_Transmit(c+48); |
} |
/*void USART_Transmit_float( float data ) { |
int a,b,c; |
c=((int)data)%10; |
b=((int)(data/10))%10; |
a=((int)(data/100))%10; |
USART_Transmit(a+48); |
USART_Transmit(b+48); |
USART_Transmit(c+48); |
}*/ |
void USART_Transmit_byte( char data ) { |
unsigned char i; |
i=0b10000000; |
while (i) { |
USART_Transmit( ( (i&data)&&1 ) + 48 ); |
i>>=1; |
} |
} |
/Designs/Oscilloscope/SW/firmware/libs/usart.h |
---|
0,0 → 1,17 |
#ifndef USART_H |
#define USART_H |
//Inits: |
void USART_Init( unsigned int ubrr); // 8b, no parity, 1 stop |
// asynchronous, RX interrupt |
// Busy loops: |
void USART_Transmit( unsigned char data ); // send char (1B) |
void USART_Transmit_string( char *data ); // send string |
void USART_Transmit_num( unsigned char data ); // send ascii |
void USART_Transmit_longnum( signed long data ); // send ascii |
void USART_Transmit_uint16( unsigned int data ); // send ascii |
//void USART_Transmit_float( float data ); |
void USART_Transmit_byte( char data ); //send in ascii hex reprezentation |
#endif |
/Designs/Oscilloscope/SW/firmware/main.c |
---|
0,0 → 1,79 |
// Oscilloscope firmware, Roman Pavelka, 2011 |
// written for atmega8 |
#define F_CPU 16000000 |
#define BAUD 1000000 |
//#define MYUBRR F_CPU/8/BAUD-1 |
#define MYUBRR 1 |
#include "./libs/usart.h" |
#include "./libs/spi.h" |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <util/delay.h> |
#include <inttypes.h> |
#define LEN 100 |
uint8_t data[2*LEN]; |
void measure(void); |
void send(void); |
int main (void) { |
USART_Init(MYUBRR); |
DDRB = 0b00100100; //SCK, SS out |
PORTB = 0b00000000; // CONV low |
SPI_MasterInit(); |
sei(); |
while(1) {} |
return 0; |
} |
void measure(void) { |
uint8_t i; |
for(i=0;i<LEN;i++) { |
PORTB |= 0b00000100; |
_delay_us(4); |
PORTB &= 0b11111011; //one conversion |
data[2*i] = SPI_MasterTransmit(0x0); |
data[2*i+1] = SPI_MasterTransmit(0x0); |
} |
} |
void send(void) { |
uint8_t i; |
for(i=0;i<LEN;i++) { |
/* USART_Transmit_uint16(data[i]); //ASCII transfer |
USART_Transmit('\n');*/ |
USART_Transmit(data[2*i]); //Binary transfer |
USART_Transmit(data[2*i+1]); |
// USART_Transmit('\n'); |
} |
} |
ISR(USART_RXC_vect) { |
char data; |
data=UDR; //must be read to untrigger interupt |
if (data=='m') { |
measure(); |
send(); |
} |
} |
/Designs/Oscilloscope/SW/firmware/scope.elf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:executable |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Designs/Oscilloscope/SW/firmware/scope.hex |
---|
0,0 → 1,74 |
:1000000012C02CC02BC02AC029C028C027C026C0BF |
:1000100025C024C023C069C021C020C01FC01EC08D |
:100020001DC01CC01BC011241FBECFE5D4E0DEBF25 |
:10003000CDBF10E0A0E6B0E0E2E8F4E002C0059039 |
:100040000D92A036B107D9F711E0A0E6B0E001C0EB |
:100050001D92A832B107E1F76FD011C2D1CF0F9333 |
:100060001F93CF93DF93C0E6D0E008E211E08881D0 |
:1000700077D0898175D02296C017D107C1F7DF915B |
:10008000CF911F910F910895DF92EF92FF920F93FE |
:100090001F93CF93DF93C0E6D0E00F2EF8E2EF2E50 |
:1000A000F1E0FF2EF02D08E310E00F2EF5E1DF2E3A |
:1000B000F02DF8018081846080838D2D8A95F1F781 |
:1000C00080818B7F808380E075D1888380E072D1CE |
:1000D00089832296CE15DF0561F7DF91CF911F91BD |
:1000E0000F91FF90EF90DF9008951F920F920FB63F |
:1000F0000F9211242F933F934F935F936F937F93AE |
:100100008F939F93AF93BF93EF93FF938CB18D36F3 |
:1001100011F4BADFA4DFFF91EF91BF91AF919F91EE |
:100120008F917F916F915F914F913F912F910F90A0 |
:100130000FBE0F901F90189581E090E006D084E2EA |
:1001400087BB18BA34D17894FFCFE0E4F0E0908315 |
:1001500089B982E28BB988E98AB986E880830895F3 |
:10016000EBE2F0E0908195FFFDCF8CB90895CF933D |
:10017000DF93EC018881882329F0F2DF21968881C2 |
:100180008823D9F7DF91CF910895AF92BF92CF9294 |
:10019000DF92EF92FF920F931F93DF93CF93CDB730 |
:1001A000DEB72A970FB6F894DEBF0FBECDBF7B0136 |
:1001B0008C01611571058105910519F480E3D0DF8B |
:1001C00050C0992354F48DE2CBDF10950095F09444 |
:1001D000E094E11CF11C011D111D6E010894C11C6D |
:1001E000D11C0F2EFBE0AF2EBB24F02DAC0EBD1E9C |
:1001F000C801B7012AE030E040E050E003D1F60149 |
:1002000061936F01C801B7012AE030E040E050E09F |
:10021000F9D0E22EF32E042F152FCA14DB0441F778 |
:100220008A85882311F019E00DC019E09E012F5F27 |
:100230003F4F1150F901E10FF11D80818823C9F36F |
:10024000112361F07E010894E11CF11CF701E10F1C |
:10025000F11D8081805D84DF1150C1F78981805D4F |
:100260007FDF2A960FB6F894DEBF0FBECDBFCF91C9 |
:10027000DF911F910F91FF90EF90DF90CF90BF9093 |
:10028000AF900895EF92FF920F931F93DF93CF9358 |
:1002900000D000D00F92CDB7DEB79C01009719F4C3 |
:1002A00080E35EDF34C0FE0131968E010A5F1F4F8E |
:1002B000C9016AE070E092D08193C9016AE070E000 |
:1002C0008DD0262F372FE017F10791F78D818823E6 |
:1002D00011F014E00DC014E09E012F5F3F4F11504C |
:1002E000F901E10FF11D80818823C9F3112361F029 |
:1002F0007E010894E11CF11CF701E10FF11D8081E2 |
:10030000805D2EDF1150C1F78981805D29DF0F905C |
:100310000F900F900F900F90CF91DF911F910F9141 |
:10032000FF90EF9008950F931F93182F6AE04AD023 |
:10033000082F48D047D0892F805D12DF802F6AE0D8 |
:1003400041D0892F805D0CDF812F6AE03BD0892F5F |
:10035000805D06DF1F910F910895DF92EF92FF926B |
:100360000F931F93CF93DF93C0E0D0E010E8E82E07 |
:10037000FF24E7FCF09401E30F2EF0E3DF2EF02DD5 |
:10038000812F90E08E219F21009711F48D2D01C0C7 |
:10039000802FE6DE16952196C830D10589F7DF91CA |
:1003A000CF911F910F91FF90EF90DF9008958CE512 |
:1003B0008DB908958FB9EEE2F0E080818823ECF7E3 |
:1003C0008FB10895991B79E004C0991F961708F022 |
:1003D000961B881F7A95C9F780950895AA1BBB1BA9 |
:1003E00051E107C0AA1FBB1FA617B70710F0A61B35 |
:1003F000B70B881F991F5A95A9F780959095BC0156 |
:10040000CD01089597FB092E05260ED057FD04D087 |
:1004100014D00AD0001C38F45095409530952195A1 |
:100420003F4F4F4F5F4F0895F6F790958095709529 |
:1004300061957F4F8F4F9F4F0895A1E21A2EAA1BFF |
:10044000BB1BFD010DC0AA1FBB1FEE1FFF1FA21784 |
:10045000B307E407F50720F0A21BB30BE40BF50B81 |
:10046000661F771F881F991F1A9469F7609570950A |
:10047000809590959B01AC01BD01CF010895F89442 |
:02048000FFCFAC |
:00000001FF |