Forum APRS Polska

Zaloguj się lub zarejestruj.

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Szukanie zaawansowane  

Aktualności:

Autor Wątek: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem  (Przeczytany 38852 razy)

SP8EBC

  • *
  • Offline Offline
  • Wiadomości: 266
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #30 dnia: Styczeń 09, 2013, 11:48:52 LOC »

A tak trochę z innej mańki. Jak sądzisz, czy takie filtry cyfrowe sprawdzały by się dobrze przy dekodowaniu CTCSS?? W AFSK problem jest jeszcze o tyle mały, że odstęp w częstotliwości pomiędzy tonami jest bardzo duży. A tutaj mamy różnicę ledwo kilka Hz


Wydaje mi się, że teraz ogarnę temat APRS (a może w przyszłości pełna obsługa Packet Radio). Na razie na pierwszy ogień idzie obsługa GPS i logowanie na kartę pamięci. Pierwsze i tak muszę zrobić aby tracker był trackerem, drugie jest potrzebne bo ma być to urządzenie dla paralotniarzy. Sam APRS jest w sumie tylko na nasze potrzeby (tj moje i innych krótkofalowców), bo ciężko było by mi przekonać moich kumpli lataczy żeby zrobili sobie pozwolenie radiowe, kupili drugie radio i używali tej formy trackingu. Teraz jak już, to korzystają z GPRS i różnych aplikacji.

Zapisane
Mateusz == 43-300 Bielsko Biała

SP6VGX

  • *
  • Offline Offline
  • Wiadomości: 160
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #31 dnia: Styczeń 09, 2013, 12:29:10 LOC »

No mnie w sumie tez tak na PR swojego czasu wzielo, ot spotkalem po dlugim czaie (a w SP6 niezbyt czesto obecnie bywam) Mariana SP6FIG na forum i jakos tak wyszlo... Z tym ze w Warszawie PR praktycznie obecnie jest martwe to jakos postanowilem cos podlubac z APRS bo to jedyne ramki jakie tutaj od czasu do czasu lataja... Jednak to wszystko to raczej takie przymiarki do wiekszego projektu (musze sobie przypomniec troche z DSP) - konkretnie chce sobie poskladac homodyne na KF z wlasnym rozbudowanym DSP. Choc na razie mam tam jakas dzialajaca czesc do APRS-u i zastanawiam sie co dalej :) Moze jakis tracker z monitorem ramek, moze cos innego. He he moze ktos bedzie mial jakis ciekawy pomysl... w sumie dzisiaj zaloze nowy temat i zobacze moze ktos da jakies pomysly i zaczne w wolnych chwilach cos skladac, moze zrobi sie z tego OpenSource itd. jak beda chetne osoby do projektu. Osobiscie do APRS-u to tak podchodzilem dosc dlugo sceptycznie, a moze jak to okreslil SP6FIG system dla wscipskich ;) Ale fakt nie ma koniecznosci podawania wlasnej pozycji jak ktos dba o prywatnosc, za to jest troche innych mozliwosci :) Moze uda mi sie poznac jakiegos zapalenca z SP5 i cos uda sie razem podzialac  w tym temacie :)

Odnosnie CTCSS to nie ma najmniejszego problemu - generalnie w sofcie mozna zrobic niemal wszystko, czlowiek jest tylko ograniczony wydajnoscia procesora czy dedykowanego DSP... Jak chcesz sie pobawic to polecam plytke ktora sobie polutowalem tzn. AVT 2975 (projekt opublikowany w Elektronice dla Wszystkich 01.2011), dalej od numeru 04.2001 jest tez prosty kurs STM32 wlasnie pod katem DSP (filtry, FFT itd.). Sama plytka jest fajna bo ma sie na pokladzie wszystko co potrzeba na poczatek do zabawy z prostym DSP i nie trzeba kombinowac z pajakami :)

Odnosnie twojego ukladu to fakt fajna sprawa, jak bys mogl opisac cos wiecej to byl bym wdzieczny (ale pod katem funkcji wlasnie dla paralotniarzy). Sam juz nie latam na parolotni (przesiadlem sie na Tajfuna TL 32), ale tez mam kilku znajomych ktorzy sie w to dalej bawia (w tym jeden krotkofalowiec SP6ORI - choc juz chyba na pamach niezbyt aktywny) i moze by byli tym ukladem zainteresowani.

Choc prawde mowiac mnie tez niezbyt slychac... ot do tej pory na wynajmowanych mieszkaniach nie mialem mozliwosci odpalic stacji, na obecnym sa chyba jakies szanse bo wlasciciel bardzo mily i moze uda sie kawalek drutu na KF wystawic... do tego ktos w kamienicy ma antene na UKF i cos wisi na KF (ale raczej do nasluchu)...


« Ostatnia zmiana: Styczeń 09, 2013, 12:37:03 LOC wysłana przez SP6VGX »
Zapisane
Tomek SP6VGX
QTH: Warszawa, LOKATOR: KO02NG
QRG: SR5WA (439.350)
D-STAR: SR5WW B (438.500) - REF032
DMR-ID: 2600023

SP8EBC

  • *
  • Offline Offline
  • Wiadomości: 266
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #32 dnia: Styczeń 10, 2013, 09:59:49 LOC »

Jeżeli chodzi o wydajność, to narazie muszę powalczyć ze sterownikiem do wyświetlacza HD44780. Puki co jest zrobiony na zasadzie "żeby działał", czyli zawiera w sobie pętle opóźniającą która pasuję temu procesorowi jak pięść do oka i zajmuję większość jego czasu. W moim zamyśle ma powstać tracker APRS oraz moduł radiomodemu który może być wykorzystywany do transmisji telemetrii live z pokładu modelu RC czy innego obiektu latającego/jeżdżącego (właśnie dlatego jest mi potrzebny też odbiór danych). Zastanawiam się jednak czy ubierać to w protokół AX.25 i uprawiać pacet radio, czy wysyłać dane w surowej formie.... Ale tak jak pisałem, to w dalszej kolejności, bo mam jeszcze do zrobienia kilka bardziej podstawowych rzeczy.. Pytam o CTCSS bo można by zrobić protezę do przemienników/radiotelefonów bazujących na Radmorze, tak aby móc go nadawać i dekodować, ale to taki tylko luźny pomysł :)

Opis mojego wariometru oczywiście będzie i to nawet w formie Open Source (z tym że tylko i wyłącznie do niekomercyjnych zastosowań prywatnych), ale jak będę miał gotowe urządzenie i zrobię porządek w kodzie. Na razie wstyd by mi było to pokazywać :)

A tak w ogóle to fajny ten twój Tajfun :) Próbowałeś krążyć nim w termice przy wyłączonym silniku??
Zapisane
Mateusz == 43-300 Bielsko Biała

SP6VGX

  • *
  • Offline Offline
  • Wiadomości: 160
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #33 dnia: Styczeń 10, 2013, 16:37:44 LOC »

Akurat z HD44780 to za pewne uda sie szybko zrobic, ten wyswietlacz sie akurat prosto steruje. Ja akurat dzisiaj zrobilem testy czesci nadawczej i ladnie wysyla pakiety he he wkoncu zaistnialem na aprs.fi :) Z tym ze niestety na przenosce nic z okolic nie odbieram, a zewnetrznej anteny na razie brak :( Do tego przez to ze przenoska jest na stole robia mi sie jaja z ta pajeczyna, tzn. pakuje sie w.cz. i zawiesza procka - najgorsze to ze czasem PTT sie przez to blokuje... a jak dziala to znowu wiesza sie przejsciowka USB<->COM na FTDI.
Bede chyba musial cos pomyslec bo nie da sie testow robic z takimi jajami... Na razie chyba wezme sie za implementacje USB VCP tak aby polaczenie z PC bylo po USB, a RS232 zostawie tylko do GPS-a (musze jakiegos sobie kupic i napisac jego obsluge).
Reasumujac odbieranie dziala przetestowane tylko na plycie, a nadawanie dziala bo pakiety ladnie pojawiaja sie na podgladzie ruchu serwera poland.aprs2.net. Choc tez tak z trudnosciami z tego co widze dolatuje do digi i niestety ja go nie slysze. Jak to mowiaj jak nie urok to sraczka ;) Bez anteny sie chyba nie pobawie...

Natomiast co do tajfuna to konstrukcja prosta jak budowa cepa, lata to niemal samo... ale niestety z wylaczonym silnikiem zachowuje sie niemal jak kamien ;) wiec jak zgasnie to trzeba szybko szukac gdzie mozna siadac na ziemi :) Do tego zaleta taka ze sprzet mozna tanio kupic (oczywiscie w Czechach, to samo licencja i rejestracja) bo w PL to niestety kosmos cenowy jak chce sie latac :)
Zapisane
Tomek SP6VGX
QTH: Warszawa, LOKATOR: KO02NG
QRG: SR5WA (439.350)
D-STAR: SR5WW B (438.500) - REF032
DMR-ID: 2600023

SP8EBC

  • *
  • Offline Offline
  • Wiadomości: 266
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #34 dnia: Styczeń 10, 2013, 17:07:11 LOC »

No to widzę, że masz tracker prawie gotowy :) Nadajesz przez PWM czy przez DAC?? Ja teraz piszę sobie funkcję do parsowania NMEA, potem będę walczył z kartą SD i FAT32... Jeszcze do tego kilka małych poprawek w sterowniku USART i powinno fungować. Tzn będzie fungować jak napiszę jeszcze jedną bibliotekę która będzie mi pluła plikami IGC, ale to akurat nie jest najgorsze...

Wziąłem wyświetlacz HD właśnie po to, żeby nie zajmować się zbędnymi elementami projektu tylko od razu przejść do konkretów. A swoją drogą ten wyświetlacz jest dość wdzięczny jeżeli chodzi o czytelność wyświetlanego tekstu. W wersji produkcyjnej może pokuszę się o OLED. Z jednej strony bajerancki i czytelny, ale też dość drogi

Podają temu tajfunowi doskonałość? Tak z ciekawości pytam, czy ma większą czy mniejszą niż glajt. No i z tego co widzę, to ma to "normalny" silnik benzynowy spalający bezołowiową 95 a nie Avgaz 100LL który kosztuje tyle ile kosztuje, ile średnio pali na godzinę lotu? Jak byś przyleciał tym na Tamę to na pewno będzie to dla mnie dodatkowy (jeżeli nie decydujący) środek motywujący żeby się tam pojawić i ukończyć do tego czasu tracker, hihi :D
« Ostatnia zmiana: Styczeń 10, 2013, 17:11:19 LOC wysłana przez SP8EBC »
Zapisane
Mateusz == 43-300 Bielsko Biała

SP6VGX

  • *
  • Offline Offline
  • Wiadomości: 160
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #35 dnia: Styczeń 10, 2013, 18:47:49 LOC »

Uzylem DAC-a ot skoro sa wolne to wykorzystalem. Co do trackera to w sumie niby tak, ale obsluge protokolu na razie mam zrobiona tak na szybko i musze ja zoptymalizowac pod katem zapotrzebowania na pamiec itp. No i jeszcze poczytac sobie specyfikacje APRS-u co by wiedziec jak parsowac ramki... Natomiast dalej zastanawiam sie co z tym dalej robic :)

W sumie myslalem nad czyms w stylu FOA Pack... no i pozostaje kwestia wyswietlacza. Mozna dac "chinczyka" TFT 3.2" na SSD1298 ot cos w tym stylu http://propix.com.pl/pl/p/LCD-3.2-TFT-SSD1298/25

Z tym ze tutaj potrzeba by dac drozszy procek z FSMC, do tego ten wyswietlacz jest dosc klopotliwy w obsludze. W sumie SSD1298 nie ma wiecej pamieci by robic sobie double buffer, tak aby nie bylo widac jak sie rysuje... a nawet przez FSMC widac jak sie zapelnia caly ekran trzeba wszystko rysowac w "oknach"... Do tego ze wzgledu na to ze to kolor troche poleci pamieci na grafiki itp. Choc napisanie calego  GUI od podstaw z ekranym dotykowym to chyba najwiecej pracy w calym projekcie. W sumie mam taki wyswietlacz i testowalem na STM32 F4 Discovery (sporo szybszy procek) i sterowanie przez FSMC... bylo w sumie szybko ale niestety nie zwala predkosc z nog :) No i takie LCD niestety troche bedzie szarpac z zasilania :)

Z drugiej strony mozna dac klasyczny graficzny LCD, no ale zaraz ktos powie ze warto isc z czasem... (przynajmniej takie propozycje tutaj czytalem).

Wiec jak na razie brak pomyslow co robic z tym dalej :)


Natomiast co do Tajfuna to tak w okolicach 11-12l/h przy predkosci przelotowej 100km/h. Natomiast jesli chodzi o Tame to niestety mnie tam raczej nie bedzie. W Warszawie nie mam zbytnio transportu, samolot tak samo stoi w rodzinnym miescie (w SP6) bo tutaj nie mam gdzie trzymac. Do tego ta maszyna niezbyt nadaje sie na dluzsze trasy, ot to maszynka do spokojnego rekraacyjnego latania (w sumie dobra do nauki bo wybacza bledy)... Generalnie tez latam na chwile obecna niezbyt dlugo wiec na cos szybszego na razie nie chce sie przesiadac. Do tego zaleta jest wysoko umieszczony silnik, a co za tym idzie smiglo... bo juz mialem kilka awaryjnych ladowan na polach ;) W innej maszynie przez krzaczory smiglo bylo by na 100% do wymiany...
« Ostatnia zmiana: Styczeń 10, 2013, 18:56:00 LOC wysłana przez SP6VGX »
Zapisane
Tomek SP6VGX
QTH: Warszawa, LOKATOR: KO02NG
QRG: SR5WA (439.350)
D-STAR: SR5WW B (438.500) - REF032
DMR-ID: 2600023

SQ5NWI

  • PG APRS
  • *
  • Offline Offline
  • Wiadomości: 265
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #36 dnia: Styczeń 11, 2013, 09:36:08 LOC »

... Natomiast jesli chodzi o Tame to niestety mnie tam raczej nie bedzie. W Warszawie nie mam zbytnio transportu,...

Nie poddawaj się na starcie! Z SP5 z tego co zaobserwowałem (choć pojechać udało mi się dopiero w 2012 roku) zwykle jakieś kilkuosobowe grupki się organizują i jadą jednym czy dwoma autami, więc jak będziesz chętny to na pewno transport się znajdzie.  ;)
Zapisane
Krzysiek
SQ5NWI

SP8EBC

  • *
  • Offline Offline
  • Wiadomości: 266
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #37 dnia: Styczeń 11, 2013, 09:57:05 LOC »

Jeżeli chodzi o mnie to nad GUI nie będę się zbytnio rozwodzić. Tak jak już napisałem wcześniej, chciałbym się skupić na aspekcie użytkowym. Jestem w tym projekcie sam dlatego muszę się nieco streszczać. Inna sprawa jest taka, że gdybym zaczął ładować w to wyświetlacze TFT to glajciarze zaraz by się do mnie uśmiechali o funkcjonalność LK8000 (powinieneś wiedzieć co to). A tego to ja się już niestety nie podejmę, ponieważ jest to zbyt potężne oprogramowanie zarówno pod kątem możliwości czasowych jak i wydajności procesora. Bez tego instalowanie w wariometrze takiego wyświetlacza graficznego nieco mija się z celem i niepotrzebnie podnosi koszty które mają być jak najniższe.

Jak już to chciałbym (schodź nie jestem do końca przekonany nad sensownością tego rozwiązania) dopiąć do tego moduł BT i wyłać wg standardu NMEA dane do PDA z zainstalowanym LK8000, chodzi o to żeby program miał wysokość baryczną a nie tylko GPS. Ale tak jak napisałem nie jestem do końca przekonany do tego, poza tym ponoć nie wszystkie nawigację z BT obsługują na nim emulację portu szeregowego..



Czyli wychodzi na to, że godzina wożenia się tym maleństwem to jakieś cca 70 złotych. Czyli jest to trochę drożej niż godzina latania patykiem plus start na linie w lokalnym aeroklubie. Aczkolwiek przemawia prze zemnie osoba niezainteresowana używaniem napędu mechanicznego w lotnictwie :) Napęd termiczny jest dużo tańszy i daje o wiele więcej frajdy, tylko czasami trzeba uważać żeby się szmata nad głową nie pomięła :) A tak z ciekawości, twoja maszynka ma registracne cislo OK alebo SP? I masz do niej jakieś lotnisko czy po prostu startujesz z łąki za domem?
« Ostatnia zmiana: Styczeń 11, 2013, 10:02:52 LOC wysłana przez SP8EBC »
Zapisane
Mateusz == 43-300 Bielsko Biała

SP6VGX

  • *
  • Offline Offline
  • Wiadomości: 160
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #38 dnia: Styczeń 11, 2013, 11:37:23 LOC »

W sumie jest pare "pasow startowych" u znajomych ;) ot jest nas kilku maniakow z tajfunami :) i kilku kolegow ma pare hektarow :) Ja niestety w bloku wiec bez nich zostal by aeroklub, a ja unikam okropnie towarzystwa z PL. Niestety u nas latanie to w znacznej czesci "elyta", wiec jak nie masz minimum Cesny to jestes dziad... a ULM-y to zlo wcielone dla biedakow :)

W Czechach latanie to cos normalnego wszyscy sa przyjazni, ladujesz tam i zaraz znajdujesz milych ludzi... spokojnie mozna ogladnac ich mazyny i nikt nie krzyczy... a i czesto wieczorem zaprosza na grila z piwem :) Czlowiek tez czasami poleci tam sie odwzajemnic i zrobic jakiegos grila :) Do tego jak wpominalem inne ceny... za przeglad z przyjazdem Czecha do PL (jechal okolo 70km) zaplacilem 120zl !!! szok :)

Tak maszyna ma numery OK :) bo w PL nie ma sensu przeplacac. Tak samo wiele osob mowi ze w CZ kursy i egzaminy to sztuka i ludzie po tym nie umieja latac... a ja mam odwrotne zdanie. Fakt tam nie klada moze duzego nacisku na teorie i egzamin teoretyczny to taka sztuka. Ale niestety wiecej klada na praktyke i nauke latania. Tam podczas nauki czy egzaminu niemal standardem jest ze egzaminator ma ukryty przelacznik i gasi ci silnik... lub bierze tekture i zakrywa ci przyrzady proszac o zrobienie skretu i utrzymanie okreslonego katu itd. No a na to wszystko jest sporo taniej... praktycznie za ta kase co wydalem na kurs, egzamin i tajfuna to bym mogl stare auto w PL kupic :)... bo na kurs by nie starczylo (patrzac ile biora za godzine lotu). A moglem wydac jeszcze mniej (dojezdzajac bo do granicy z Czechami mam 7km), ot sporo poszlo na hotel, grile i piwo :) ale za to bylo milo :) Dobra ale powstal lekki offtop - jak cos to mozemy na PW o tym pogadac :)

@SQ5NWI

Jak sie uda zalapac na jakis wyjazd i kobieta nie bedzie zbytnio marudzic to bede chetny, zawsze to jakas odskocznia od codziennosi i odposzynek. A widzialem na zdjeciach ze ladna i spokojna okolica...
 


Zapisane
Tomek SP6VGX
QTH: Warszawa, LOKATOR: KO02NG
QRG: SR5WA (439.350)
D-STAR: SR5WW B (438.500) - REF032
DMR-ID: 2600023

SQ5NWI

  • PG APRS
  • *
  • Offline Offline
  • Wiadomości: 265
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #39 dnia: Styczeń 11, 2013, 16:40:44 LOC »

Jak sie uda zalapac na jakis wyjazd i kobieta nie bedzie zbytnio marudzic to bede chetny, zawsze to jakas odskocznia od codziennosi i odposzynek. A widzialem na zdjeciach ze ladna i spokojna okolica...

Zerkaj na wątek poświęcony TAMIE 2013 - na pewno zgadasz się z kimś z tutejszych. Ja się wybieram, ale jeszcze nie wiem czy własnym transportem - wtedy będę szukał wspólników - czy z kimś jak w 2012.
Zapisane
Krzysiek
SQ5NWI

SP8EBC

  • *
  • Offline Offline
  • Wiadomości: 266
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #40 dnia: Styczeń 15, 2013, 00:34:25 LOC »

Płytka PCB dotarła do mnie z produkcji i dzisiaj zaczałem montaż mojego urządzenia (ostudzam zapał, jeszcze bez APRS). Oczywiście płytka będzie wymagała paru poprawek bo rozmieszczenie elementów jest mówiąc delikatnie, nieoptymalne ale jak to mi mój kolega powiedział, trzecia wersja powinna być używalna.  8)

Będę raportował dalszy postęp prac. Jeżeli chodzi o software to mam funkcję do parsowania tekstowej ramki NMEA (mogę udostepnić już teraz) i przy tej okazji poprawiłem sterownik do USARTu...
Zapisane
Mateusz == 43-300 Bielsko Biała

SP3LYR

  • Administrator
  • *****
  • Offline Offline
  • Wiadomości: 2150
  • Teoretycznie, praktyka pokrywa się z teorią
    • o APRS po polsku
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #41 dnia: Styczeń 15, 2013, 01:18:30 LOC »

Jest na pewno kilka parserów aprs opublikowanych w sieci. Nie mogę odszukać linków do nich, ale jeden z nich, to np. używany przez Hessu - autora aprs.fi http://search.cpan.org/~hessu/Ham-APRS-DeviceID-1.06/
Trochę o nim, gdy był publikowany http://blog.aprs.fi/2007/12/aprs-parser-module-used-by-aprsfi.html, ale ciągle jest udoskonalany.
Może ten parser będzie jakoś pomocny, bo trzeba przyznać, że dekodowanie/interpretowanie wszystkich danych aprs, to nie mała sztuka.
Dobrym narzędziem do porównania interpretacji danych jest w aprs.fi 'view=decoded' jak np. http://aprs.fi/?c=raw&call=SR3WXA&limit=5&view=decoded
Zapisane
73
Andrzej SP3LYR

SP9RQA

  • PG APRS
  • *
  • Offline Offline
  • Wiadomości: 296
    • Zdjęcia
Zapisane
Krzysztof, Gorlice QSX 145.300
jabber:sp9rqa@jabster.pl, http://sp9rqa.net http://staregorlice.eu

SP8EBC

  • *
  • Offline Offline
  • Wiadomości: 266
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #43 dnia: Kwiecień 30, 2013, 09:02:09 LOC »

No więc modem (a w zasadzie jego część odbiorcza) się robi. Oczywiście nie uniknąłem wpadnięcia w poważne problemy. Po pierwsze wejście przetwornika w moim ARM wydaje się być strasznie głuche. Podając sygnał z laptopa muszę na prawdę słusznie zwiększać wysterowanie (w regulacji głośności wsio na full, w audacity dodatkowo +23dB!!). Poza tym mam coś nie tak w kodzie co powoduje, że pomimo iż same filtry coś przetwarzają do z w ramkach mam same 0xFF

Mój kod wygląda tak (afsk_pr.c)
#include "afsk_pr.h"

#define N 8
static int16_t data[N];
static int16_t coeffloi[N];
static int16_t coeffloq[N];
static int16_t coeffhii[N];
static int16_t coeffhiq[N];
static int16_t ptr=0;
static uint8_t niesynchro_bity; // zdekodowane przez filtr bity.. Niesynchroniczne do prędkości bodowej
static uint8_t synchro_bity; // bity zsynchronizowane do prędkości bodowej
unsigned char nrzi_bity; // bity zsynchronizowane i po dekodowaniu NRZI
static uint16_t destuff_bity; // bity po destuffingu. Zawierajace wlasciwe dane ramki AX25
static int8_t bit_faza; // aktualna "faza" bitow
static uint8_t bit_counter = 0;
static uint8_t DCD = 0; // data carrier detect
static uint8_t PacketByteCounter = 0; // licznik odebranych bajtów z jednej ramki

struct Frame {
char RAWContent[80];
};

struct Frame Frame;

void ADCStartConfig(void) {
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
ADC1->CR2 |= ADC_CR2_ADON;
ADC1->CR2 |= ADC_CR2_RSTCAL;        // Reset calibration
    while(ADC1->CR2 & ADC_CR2_RSTCAL);          // Wait for reset
    ADC1->CR2 |= ADC_CR2_CAL;          // Start calibration
    while(ADC1->CR2 & ADC_CR2_CAL);
ADC1->CR2 |= ADC_CR2_TSVREFE;   
ADC1->SQR1 = ADC_SEQUENCE_LENGTH(0); // odczyt tylko jednego kanału
ADC1->SQR3 =  ADC_SEQ1(14); // wybór kanału ADC -- 17 - napięcie zasilania
ADC1->SMPR1 = ADC_SAMPLE_TIME0(SAMPLE_TIME_239_5); // czas próbkowania
ADC1->CR1 = ADC_CR1_EOCIE; /// przerwanie na zakończenie konwersji
// NVIC_EnableIRQ(ADC1_2_IRQn);
// NVIC_SetPriority(ADC1_2_IRQn, 3);
ADC1->CR2 |= ADC_CR2_CONT;
ADC1->CR2 |= ADC_CR2_ADON;
ADC1->DR;

}

int ADCSendViaSerial(unsigned short int adc_val) {
int i;
char temp[8]; // pomiary
char* endl = ";\n\r"; // pomiary
adc_val &= 0xFFFF;
for (i=0 ; i<10 ; i++)
*(temp+i) = 0x00;
int2string(adc_val, temp);
strcpy(temp+5,endl);
FixString(temp,8);
SrlSendData(temp);
return 0;
}

void InitFilter(void) {
int i;
for(i=0;i<N;i++) {
coeffloi[i]=2047*cos(2*3.1415*i/N);
coeffloq[i]=2047*sin(2*3.1415*i/N);
coeffhii[i]=2047*cos(2*3.1415*i/N*2200/1200);
coeffhiq[i]=2047*sin(2*3.1415*i/N*2200/1200);
}
}

int SampleData(unsigned short int input) {
int16_t i,d;
int32_t outloi=0,outloq=0,outhii=0,outhiq=0,out=0;
data[ptr]=input; ptr = (ptr+1)%N;
for(i=0;i<N;i++) {
d = data[(ptr+i)%N];
outloi += d*coeffloi[i];
outloq += d*coeffloq[i];
outhii += d*coeffhii[i];
outhiq += d*coeffhiq[i];
}
out = (outhii>>11)*(outhii>>11)+(outhiq>>11)*(outhiq>>11)
-(outloi>>11)*(outloi>>11)-(outloq>>11)*(outloq>>11); // przesow o 11 bitow bo przetwornik ma 12 bitow
return (out);
}

int SynchroNRZI(unsigned char bit) {
unsigned char temp;
niesynchro_bity <<= 1; // przesuwanie zawartosci bitow niezsynchronizowanych zeby zrobic miejsce na nowy
niesynchro_bity |= bit;     // dodawanie do zmiennej nastepnego zsamplowanego bitu (bodu)
if ((niesynchro_bity & 0x03) == 0x01 || (niesynchro_bity & 0x03) == 0x02) {
// sprawdza czy nie zmienil sie przesylany bit (zmiana tonu)
if (bit_faza <= 32 )
// korekcja "fazy" dekodera
bit_faza += 1;
else
bit_faza -= 1;
}
bit_faza += 8; // zwiekszanie "fazy" o 8 po kazdym niezsynchronizowanym bicie.
// Każdy z nich jest samplowany osiem razy
if (bit_faza >= 64){
// jezeli faza przekroczyla 64, czyli przetworzono 8 niezsynchronizowanych bitow.
    // Każdy pojedynczy bit (a w zasadzie bod) jest samplowany 8 razy.
bit_faza %= 64; // powracanie z "fazą" na poczatek. W przypadku gdy po ostatnim zwiekszeniu licznika
// wyszlo powyzej 64 to nalezy wrocic do wartosci rownej (bit_faza - 64) tak aby nie
// gubic synchronizacji
synchro_bity <<= 1; // przesuwanie zsynchronizowanych do predkosci bodowej bitow o jeden
nrzi_bity <<= 1;

temp = niesynchro_bity & 0x07; // ostatnie trzy samplowane bity
if(temp == 0x07 || temp == 0x06 || temp == 0x05 || temp == 0x03)
// jezeli z trzech ostatnich niesynchro bitow, dwa maja wartosc jeden
// to mozna uznac ze odebrano jedynke
synchro_bity |= 1;
else; // jezeli nie to zero.
// BITY SA KODOWANE PRZY UZYCIU NRZI!!!!!!! Ponizej dekodowanie
if ((synchro_bity & 0x03) == 0x03 || (synchro_bity & 0x03) == 0x00)
nrzi_bity |= 1; // jezeli dwa kolejne bity sa takie same to jeden
else; // jezeli sa rozne to zero
// if (nrzi_bity_c != 8)
// nrzi_bity_c++; // jezeli nie odebrano jeszcze calego bajtu
// else
// nrzi_bity_c = 0; // w momencie odebrania calego bajtu zresetuj licznik
if (nrzi_bity == 0x7E) {
// ADCSendViaSerial(7);
DCD = ~DCD;
}
else;
ADCSendViaSerial(synchro_bity);
DeStuffing(nrzi_bity & 0x01);
return nrzi_bity; // zwracanie odkodowanych z NRZI bitow
}
return -2;
}

/// 0x7E flaga naglowka

int DeStuffing(uint8_t bit) {
// funkcja robi destuffing CIAGU BITOW. Przyjmuje wprawdzie 8 bitow ze zmiennej nrzi_bity
// czyli niby jeden bajt, ale do kolejnej pozycji lini opozniajacej dolancza tylko ten najmniej znaczacy (najnowszy)
if ( DCD > 0 ) {
destuff_bity <<= 1;
destuff_bity |= bit;
if ((destuff_bity & 0x3f) == 0x3e) {
destuff_bity >>=1;
bit_counter--;
}
else;
bit_counter++;
if (bit_counter == 8 && PacketByteCounter < 70) {
bit_counter = 0;
Frame.RAWContent[PacketByteCounter] = (destuff_bity & 0xFF);
// ADCSendViaSerial(Frame.RAWContent[PacketByteCounter]);
PacketByteCounter++;
// destuff_bity = 0;
}
  if (PacketByteCounter == 70) {
PacketByteCounter = 0;
if (DCD == 0xFF)
DCD = 0;
}
else;
}

Natomiast obsługa przerwania wyzwalanego 9600x na sekunde wygląda tak
void TIM2_IRQHandler(void) {
//char teemp[11]; // pomiary
//char* endl = ";\n\r"; // pomiary
//int i;
//for (i=0 ; i<11 ; i++)
// *(teemp+i) = 0x00;
// timer służący do odliczania czasu
TIM2->SR &= ~(1<<0);
// if ((GPIOE->ODR & GPIO_ODR_ODR15)  == GPIO_ODR_ODR15) {
// GPIOE->BSRR |= GPIO_BSRR_BR15;
// }
// else if ((GPIOE->ODR & GPIO_ODR_ODR15)  == 0) {
// GPIOE->BSRR |= GPIO_BSRR_BS15;
// }
fl = SampleData(ADC1->DR);
sampled_bit = (fl > 0);
SynchroNRZI(sampled_bit);

// ADCSendViaSerial(sampled_bit);
// if (fl_clock_en == 1)
// fl_time++;
}
Sam przetwornik jest ustawiony na przetwarzanie ciągłe bez wyzwalania własnego przerwania. Czy koledzy mogli by pomóc wyłapać ewentualne błędy w kodzie?
Zapisane
Mateusz == 43-300 Bielsko Biała

SP6VGX

  • *
  • Offline Offline
  • Wiadomości: 160
Odp: Projektowanie własnego trackera APRS czyli znęcam się nad Baycomem
« Odpowiedź #44 dnia: Maj 01, 2013, 03:46:35 LOC »

fl = SampleData(ADC1->DR - 2047);

i wywalic unsigned

SampleData(unsigned short int input) {


to tak na dzien dobry... na reszte zerkne w wolnej chwili (o normalnej godzinie)...


aaa w Keilu jest gdzies opcja (a przynajmniej tak mi sie cos przypomina) aby kompilator akceptowal skladnie GCC - wiec moje zrodla powinny sie kompilowac chyba bez przerabiania... Ale tego nie jestem pewny bo Keila uzywalem kilka razy bardziej dla zapoznania sie co i jak :)





« Ostatnia zmiana: Maj 01, 2013, 03:56:31 LOC wysłana przez SP6VGX »
Zapisane
Tomek SP6VGX
QTH: Warszawa, LOKATOR: KO02NG
QRG: SR5WA (439.350)
D-STAR: SR5WW B (438.500) - REF032
DMR-ID: 2600023