freakone | strona domowa

freakone.pl

30 Grudnia

Przyjemna nauka testów - gra-pwr

Za moich czasów studenckich do nauki testów służyła desktopowa aplikacja gra.exe stworzona przez kogoś z kierunku EiT.

Dziś nie musicie się już z nią męczyć, powstała przeglądarkowa wersja pod nazwą gra-pwr. Po stworzeniu testu generowany jest unikalny link, którym możesz podzielić się ze swoją grupą znajomych. Ponadto aplikacja obsługuje import plików tekstowych z swojego pierwowzoru - możliwe jest szybkie przeniesienie stworzonych wcześniej pytań.

Aplikacja dostępna jest pod adresem: gra-pwr.net

27 Lipca

Biblioteka RFM73 dla Raspberry PI oraz STM32F303

Zajmuję się ostatnio projektem, w którym wykorzystuję moduły RFM73 do komunikacji. Jako, że kilka dobrych dni męczyłem się, żeby uruchomić komunikację pomiędzy RPi i STMem zamieszczam działające biblioteki pozwalające na uruchomienie modułu radiowego na tych urządzeniach.

Raspberry Pi

RFM podłączony bezpośrednio do pinów RPi.
Raspberry PiRFM73
GPIO 9MISO
GPIO 10MOSI
GPIO 11SCK
GPIO 24CSN
GPIO 7CE
GPIO 25IRQ
Jeśli chcemy podłączyć piny CE, IRQ lub CSN w inny sposób wystarczy zmienić numery portów w pliku rfm73.py

Aby skrypt zadziałał potrzebne nam są biblioteki RPIO oraz SPIdev.

Instalacja RPIO jest bardzo prosta:
sudo apt-get install python-setuptools
sudo easy_install -U RPIO

lub:

git clone https://github.com/metachris/RPIO.git
cd RPIO
sudo python setup.py install
Do działania SPIdev należy posiadać odblokowany sprzętowy moduł SPI. Po wydaniu komendy lsmod na liście powinniśmy zobaczyć wpis spi_bcm2708. Jeśli tak nie jest musimy uaktualnić firmware naszej maliny lub odblokować moduł w pliku /etc/modprobe.d/raspi-blacklsit.conf. Instalacja wygląda następująco:
sudo apt-get update
sudo apt-get install python-dev
mkdir python-spi
cd python-spi
wget https://raw.github.com/doceme/py-spidev/master/setup.py
wget https://raw.github.com/doceme/py-spidev/master/spidev_module.c
sudo python setup.py install

Uruchomienie RFM73 wygląda następująco:
import rfm73
import time

def rfm_interrupt(gpio_id, val):
	status = rfm73.register_read(0x07) #read status reg

	if status & (1 << 6): #rx data
		print "int:", rfm73.receive()
	if status & (1 << 4): #max_rt
		print "packet not sent"
	rfm73.register_write(0x07, status) #clear int flags


rfm73.init(rfm_interrupt)
rfm73.init_banks()
rfm73.receive_mode()

while 1:
	time.sleep(0.1)


STM32F303
Całość została uruchomiona na płytce ewaluacyjnej STM32F3Discovery.
STM32RFM73
PB14MISO
PB15MOSI
PB13SCK
PB12CSN
PB11CE
PB1IRQ

Uruchomienie modułu:
#include <stm32f30x.h>
#include "rfm73.h"
void clocks_init()
{
	//HSE i zegar na 72MHz
	RCC->CR = RCC_CR_HSION;
	while(!(RCC->CR & RCC_CR_HSIRDY)){};
	FLASH->ACR |= FLASH_ACR_LATENCY_0;
	RCC->CFGR = (RCC_CFGR_PLLMULL9 | RCC_CFGR_PPRE1_DIV2 | RCC_CFGR_PLLSRC_HSI_Div2);
	RCC->CR |= RCC_CR_PLLON;
	while(!(RCC->CR & RCC_CR_PLLRDY)){};
	RCC->CFGR |= RCC_CFGR_SW_PLL;
	while(!(RCC->CFGR & RCC_CFGR_SWS_PLL));

	RCC->AHBENR |= RCC_AHBENR_GPIOEEN;
	GPIOE->MODER |= GPIO_MODER_MODER8_0 | GPIO_MODER_MODER9_0;
	GPIOE->ODR |= GPIO_ODR_8;
		
	RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
	GPIOB->MODER &= ~GPIO_MODER_MODER1;
	//GPIOB->PUPDR |= GPIO_PUPDR_PUPDR1_0;
	GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR1;
		
		
	RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;	
	SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI1_PB;
	EXTI->FTSR |= EXTI_FTSR_TR1;
	EXTI->IMR |= EXTI_IMR_MR1;	
	NVIC_EnableIRQ(EXTI1_IRQn);
	

	
}

unsigned char length = 0;
unsigned char rx_buf[32];

void EXTI1_IRQHandler(void){
  
	uint8_t status = rfm73_register_read(RFM73_REG_STATUS);
	if(status & (1 << 6)) //RX data
	{
			rfm73_receive(rx_buf, &length);
	}
	
	if(status & (1 << 4)) //max_rt
	{
		//packet not sent
	}
	
	rfm73_register_write(RFM73_REG_STATUS, status); //clear ints
	
	EXTI->PR |= EXTI_PR_PR1;	
	GPIOE->ODR ^= GPIO_ODR_8;
	
	
}
int main(void)
{
	clocks_init();
	rfm73_init();


	if(rfm73_is_present())
			GPIOE->ODR |= GPIO_ODR_9;
	
	rfm73_mode_transmit();

	rfm73_transmit_message("asd",3);
    while(1)
    {
	     
    }
}

Zarówno biblioteka na STM32 jak i na Raspberry Pi wykorzystuje przerwania do obsługi komunikacji przychodzącej. Biblioteki są dostępne na moim koncie GitHub.

03 Grudnia

Trawienie płytek zgodne z BHP

24 Sierpnia

Audi A6 C4 i niedziałające tylne głośniki

W mojej audi w tylnych drzwiach są aktywne głośniki firmy Nokia, które niedziałają od początku mojej przygody z tym samochodem. Dzisiaj z okazji tego, że miałem trochę wolnego czasu postanowiłem je wskrzesić.

Po półgodzinnej diagnostyce okazało się, że głośniki nie grają z dwóch powodów:

1. Podłączenie kabli w radiu

Jako, że nie używam oryginalnego radia od Audi, podłączone zostały tylko standardowe kości sygnałowe.
Jak się okazało tylne głośniki są podłączone do osobnej, niestandardowej, 6-pinowej wtyczki.


1 - lewy głośnik +
2 - prawy i lewy głośnik -
3 - prawy głośnik +
4 - pin ENABLE - po podaniu na niego napięcia 12V włączają się wzmacniacze

Podpinamy w odpowiednie miejsca w kostce ISO. Pin ENABLE podłączamy do zasilania radia (wzmacniacze będą się załączały razem z radiem). Dla ułatwienia:


2. Wytarte przewody

Drugim powodem ciszy w głośnikach były przetarte przewody sygnałowe przy membranie. Po 17 latach miedź utleniła się i została sama elastyczna linka.
Przy okazji okazało się, że wzmacniacze są oparte o układ L2750 od ST.

Naprawa trwa ok 30 minut na stronę.
  • odkręcamy 2 śrubki po bokach i zdejmujemy zaślepki

  • odkręcamy 2 śrubki w uchwycie i 1 w pokrętle od szyby

  • zdejmujemy haczyk od klamki

  • chwytamy za uchwyt i ciągniemy do góry, całośc powinna się ładnie wysunąć

  • odpinamy kable i ściągamy zawleczki

  • odkręcamy śruby mocujące głośnik

  • odkręcamy głośnik od wzmacniacza, razem 4 śrubki

  • odcinamy przetarte przewody, nożykiem zeskrobujemy utlenioną miedź z przewodów

  • lutujemy nowe przewody

  • całość składamy, z drugą stroną robimy to samo

Trzeba przyznać, że głośniki grają całkiem przyzwoicie :)

24 Sierpnia

Biblioteka eagle do RFM12, RFM70 i RFM73

Witam po długiej przerwie :)

Biblioteka zawiera 2 transcivery od firmy HOPE RF:
  • RFM 12B - moduł na 868MHz w wersji DIP i SMD

  • RMF 70/73 - moduł na 2.4GHz w wersji DIP I SMD
Do pobrania tutaj.

Przy okazji, 2 przydatne skrypty do ukrywania całej warstwy (z obrysami itp.):
Pokaż tylko dolną warstwę i pokaż tylko górną warstwę.

17 Grudnia

Zniżka 5% na kamami.pl

Kod ważny do 31.01.2013: 53E4EC4573

15 Grudnia

Minisumo Robbery i Robotic Arena

Od rozpoczęcia projektu minął miesiąc i został on ukończony. Niestety nie miałem czasu pisać postów z uaktualnieniami dlatego zapraszam na stronę projektu z zdjęciami efektu końcowego.

Robbery wziął udział w swoich pierwszych i ostatnich zawodach - nie wyszedł z fazy grupowej. Koncepcja okazała się zupełnie nieskuteczna, dlatego projekt nie będzie kontynuowany. Kształt kwadratu obróconego o 45 stopni całkowicie się nie sprawdził, dodatkowo konstrukcja była za wysoka, a silniki zbyt wolne. Robbery posłuży jako punkt odniesienia dla kolejnego robota minisumo.

Przy okazji chciałem polecić stronę mojego znajomego, Łukasza Bartosza - eMTRonics oraz zaprosić do odwiedzania nowej podstrony - będę w niej umieszczał ciekawe linki :)

08 Listopada

Nowy projekt

Początek nowego projektu - robota minisumo. Minisumo Robbery

14 Sierpnia

Seria artykułów na temat AVRów

Zacne artykuły i tutoriale o tematach:
  • AVR-GCC i atrybut PROGMEM
  • Zarządzanie dużymi projektami
  • EEPROM w AVR-GCC
  • Timery - poradnik dla początkującego
  • Przerwania - poradnik dla początkującego
  • USART w AVR-GCC
  • USART i przerwania
  • Metody programowania AVRów

Polecam!

Angielszczyzna wymagana.

14 Sierpnia

Nowy projekt

W dziale projekty dodałem przed chwilą nowy artykuł. Klaskacz - dwudrożny włącznik dźwiękowy

Przy okazji dorobiłem stronicowanie bloga - na stronie wyświetla się po 10 postów.