14-07-2013, 20:28
14-07-2013, 20:34
Dokładnie to
15-07-2013, 14:47
Po dogłębnej analizie opisu programowania poprzez złącze ISP opisanej tutaj: http://www.open-electronics.org/arduino-...-circuits/, oraz wbrew opinii Kolegów, wcześniejszych dyskutantów tego wątku, doszedłem jednak do wniosku że oddzielny programator do kompilatora Arduino jednak jest mi niezbędny. Niestety, nie ma jeszcze w ofercie oddzielnego modułu programatora, chociaż są już poszczególne fragmenty konstrukcyjne, jednak zaprojektowane dla mnie w sposób nieakceptowalny do moich wymagań. Dlatego też na bazie Arduino Duemilanowe narysowałem schemat i wzór płytki drukowanej, a jako że to prototyp, wykonałem go z elementami przewlekanymi. Moje PROGDUINO tak naprawdę jest bardzo zubożonym Arduino, tylko z niezbędnymi wyjściami na złącze programujące, które uwzględniają uwagi zawarte w opisie przytoczonym powyżej. Drobne zmiany dotyczą podłączenia pinu RESET złącza ISP do pinu 16 (SS) procesora PROGDUINO i wyłączeniu go z płytki jak w oryginale Arduino, natomiast do złącza RESET, pin 1 procesora PROGDUINO, tu jako programatora wpięty jest dodatkowo kondensator 10 uH, zgodnie z sugestiami autora opisu jw. Jako procesor wstawiłem Atmegę 168 z wgranym na stałe programem ArduinoISP, dołączonym do kompilatora Arduino.
Moje PROGDUINO zainstalowało się bez najmniejszych problemów na kolejnym porcie COM komputera i widoczne jest z poziomu kompilatora. Dokładny opis postępowania podczas programowania z wykorzystaniem złącza ISP jest podany we wskazanym na wstępie linku i nie ma potrzeby powtarzać go ponownie, jest zbyt obszerny w treści.
Do pełni szczęścia jest jeszcze wykorzystywana wcześniej opracowana płytka z wieloma podstawkami pod różne procesory z rodziny Atmega, te najczęściej wykorzystywane. Płytka spinana jest z PRODGUINO złączem ISP, a pokazana była w poście #11 z tego tematu.
Co mi to dało:
- nie muszę budować po raz kolejny pajęczyny przewodów na płycie prototypowej gdy chcę zaprogramować kolejny procesor,
- nie muszę wymieniać procesora jeśli programowałem go na płycie bazowej Arduino,
- oszczędzam cenny czas o którym wspominają Koledzy,
- i jeszcze wiele innych zalet …...o których pewnie jeszcze nawet nie śniłem.
W załącznikach schemat w pliku .PNG i wzór płytki prototypowej w pliku .LAY. Całość udostępniona na zasadach Home-Made i w zgodzie z filozofią Open Hardware.
Rysio!
Moje PROGDUINO zainstalowało się bez najmniejszych problemów na kolejnym porcie COM komputera i widoczne jest z poziomu kompilatora. Dokładny opis postępowania podczas programowania z wykorzystaniem złącza ISP jest podany we wskazanym na wstępie linku i nie ma potrzeby powtarzać go ponownie, jest zbyt obszerny w treści.
Do pełni szczęścia jest jeszcze wykorzystywana wcześniej opracowana płytka z wieloma podstawkami pod różne procesory z rodziny Atmega, te najczęściej wykorzystywane. Płytka spinana jest z PRODGUINO złączem ISP, a pokazana była w poście #11 z tego tematu.
Co mi to dało:
- nie muszę budować po raz kolejny pajęczyny przewodów na płycie prototypowej gdy chcę zaprogramować kolejny procesor,
- nie muszę wymieniać procesora jeśli programowałem go na płycie bazowej Arduino,
- oszczędzam cenny czas o którym wspominają Koledzy,
- i jeszcze wiele innych zalet …...o których pewnie jeszcze nawet nie śniłem.
W załącznikach schemat w pliku .PNG i wzór płytki prototypowej w pliku .LAY. Całość udostępniona na zasadach Home-Made i w zgodzie z filozofią Open Hardware.
Rysio!
15-07-2013, 15:33
Rysio!
Te kultowe LEDy :-)
Super, faktycznie nie ma sensu plątać się za każdym razem z kablami. Przy najbliższej okazji idzie do trawienia.
MAc
mrn
Te kultowe LEDy :-)
Super, faktycznie nie ma sensu plątać się za każdym razem z kablami. Przy najbliższej okazji idzie do trawienia.
MAc
mrn
15-07-2013, 16:26
Programator do procesorów AVR możemy zrobić jeszcze taniej bez układu FT232RL. Taniutka ATmega8 plus soft potrafi obsługiwać bezpośrednio USB na potrzeby programatora. Polecam wykonanie programatora USBasp.
http://www.fischl.de/usbasp/
http://www.fischl.de/usbasp/
16-07-2013, 14:05
(15-07-2013 14:47)SP6IFN napisał(a): [ -> ]W załącznikach schemat w pliku .PNG i wzór płytki prototypowej w pliku .LAY. Całość udostępniona na zasadach Home-Made i w zgodzie z filozofią Open Hardware.
Rysio!
Zgadzam się z potrzebą posiadania zewnętrznego programatora.
Też mam taki. Tylko moja płytka kończy się typowym złączem KANDA (10 stykowe), do którego dołączam taśmę. Wymienne taśmy pozwalają na programowanie układów wyposażonych w różne gniazda (10-stykowe, 6-stykowe) i bezpośrednie podłączenie kabelków.
17-07-2013, 1:31
Dzisiaj Łukasz wrzucił nową wersję biblioteki do APRS. Pojawiło się pare nowych metod użycia dzięki czemu zzabawa jest bardziej elastyczna:
Ja nieco poprawiłem swoją płytkę do testowania tej biblioteki i napisałem w arduino prosty program by się tym bawić.
Kod jest do uporządkowania, piszę w arduino dopiero trzeci tydzień.
Do tego napisałem aplikację na pc w lazarusie do konfiguracji płytki...
Ogólnie trzeba jeszcze sporo nad tym popracować, jak ktoś ma ochotę to zapraszam do zabawy.
Kod:
#include <Arduino.h>
#include <ArduinoQAPRS.h>
char * packet_buffer = " \n ";
void setup(){
// inicjalizacja
// pin 3 to sensePin [wejscie] - 1 oznacza brak mozliwosci nadawania
// pin 2 to txPin [wyjscie] - stan wyski w momencie rozpoczecia nadawania
QAPRS.init(3,2,"SQ5RWU", '0', "APZQAP", '0', "WIDE1-1");
}
void loop() {
// nadanie paketu typu komentarz
packet_buffer = ":TEST TEST TEST de SQ5RWU";
// zmiana adresu źródłowego i ssida
QAPRS.setFromAddress("SQ5R", '1');
QAPRS.sendData(packet_buffer);
// nadanie pakietu z pozycja i symbolem wahadlowca
packet_buffer = "!5215.68N/02057.48ES#";
// zmiana adresu źródłowego, ssida i ścieżki
QAPRS.setFromAddress("SQ5RWU", '2');
QAPRS.setRelays("WIDE2-2");
QAPRS.sendData(packet_buffer);
// nadanie danych pogodowych bez pozycji
packet_buffer = "_07071805c025s009g008t030r000p000P000h00b10218";
// zmiana ścieżki
QAPRS.setRelays("WIDE1-1");
QAPRS.sendData(packet_buffer);
delay(5000);
}
Ja nieco poprawiłem swoją płytkę do testowania tej biblioteki i napisałem w arduino prosty program by się tym bawić.
Kod:
/*
Copyright Rysiek Labus SQ9MDD
APRS Platform na bazie arduino i QAPRS.
APRS Platform is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
APRS Platform is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with ArduinoQAPRS; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
APRS Platform jest wolnym oprogramowaniem; możesz go rozprowadzać dalej
i/lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU,
wydanej przez Fundację Wolnego Oprogramowania - według wersji 2 tej
Licencji lub (według twojego wyboru) którejś z późniejszych wersji.
Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on
użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej
gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH
ZASTOSOWAŃ. W celu uzyskania bliższych informacji sięgnij do
Powszechnej Licencji Publicznej GNU.
Z pewnością wraz z niniejszym programem otrzymałeś też egzemplarz
Powszechnej Licencji Publicznej GNU (GNU General Public License);
jeśli nie - napisz do Free Software Foundation, Inc., 59 Temple
Place, Fifth Floor, Boston, MA 02110-1301 USA
Changelog
2013.07.16 Stabilna wersja 1.0 obsługa wysyłania bikonu, zapis konfiguracji
do eepromu.
*/
#include <EEPROM.h>
#include <Arduino.h>
#include "ArduinoQAPRS.h"
#define version 1.0;
//zmienne, nie dotykac
char from_addr[] = "NOLIC "; //znak
char * relays = " "; //20 znaków
char * comment_arr = " ";//bufor na ramkę 60 znaków 19 na koordynaty symboj i tablice.
char * packet_buffer = " \n ";
int volt_indic = 0; //czy pokazac napięcie?
int ssid = 0; //domyślne SSID
int beacon_interwal = 1; //domyślny czas wysyłania beaconu w minutach
int napiecie_zasilania_pin = A3;
String content = "";
unsigned long time_to_beacon = millis() + (beacon_interwal*60000); //domyślnie co minute i co minute blokujemy na dole
//zapis zmiennych do eepromu
void save_to_eeprom(){
EEPROM.write(0,1); //zaznaczamy ze zapisana jest pamiec
EEPROM.write(1,volt_indic); //zaznaczamy wyswietlanie napiecia
EEPROM.write(2,ssid); //zapisujemy ssid
EEPROM.write(3,beacon_interwal); //zapisujemy co ile wysylamy beacon
//zapis callsign do eeprom 6 znaków
for(int a = 4; a <= 9; a++){
EEPROM.write((a),from_addr[a-4]);
}
//zapis path 20 znaków
for(int b = 10; b <= 29; b++){
EEPROM.write((b),relays[b-10]);
}
//zapis komentarz 60 znaków
for(int c = 30; c <= 90; c++){
EEPROM.write((c),comment_arr[c-30]);
}
}
//odczytanie zmiennych z eepromu i wczytanie do zmiennch lokalnych albo ustawienie domyślne
void read_from_eeprom_or_make_default(){
int skonfigurowany = EEPROM.read(0);
if(skonfigurowany == 1){
volt_indic = EEPROM.read(1);
ssid = EEPROM.read(2);
beacon_interwal = EEPROM.read(3);
//odczyt callsign z eeprom
for(int a = 4; a <= 9; a++){
from_addr[a-4] = EEPROM.read(a);
}
//odczyt sciezki
for(int b = 10; b <= 29; b++){
relays[b-10] = EEPROM.read(b);
}
//odczyt kometarz koordynaty symbol i tabela z eeprom'u
for(int c = 30; c <= 90; c++){
comment_arr[c-30] = EEPROM.read(c);
}
}
else{
relays = "WIDE1 0";
comment_arr = ">EMPTY EEPROM";
}
}
void clear_eeprom_memory(){
for(int a = 0; a < 512; a++){
EEPROM.write(a,0xFF);
delay(10);
}
}
//reset jakby trzeba było sprawdzić konfigurację, no i po czyszczeniu eeproma sie przydaje
void softReset(){
asm volatile (" jmp 0");
}
//przygotowujemy dane i wysyłamy ramkę
void prepare_and_send_beacon_f(){
int napiecie_zasilania = map(analogRead(napiecie_zasilania_pin),0,1023,0,159);
int v_prefix = napiecie_zasilania/10;
int v_sufix = napiecie_zasilania%10;
if(volt_indic==1){
sprintf(packet_buffer,"%s %02u.%01uV",comment_arr,v_prefix,v_sufix);
}
if(volt_indic==0){
sprintf(packet_buffer,"%s",comment_arr);
}
QAPRS.send(from_addr, ssid, "APZMDD", '0', relays, packet_buffer);
}
//mala pomoc jesli ktoś nie ma aplikacji
void print_help(){
Serial.println("APRS Platform based on Arduino and QAPRS library.\ncommands:");
Serial.println("mca= callsign");
Serial.println("mti= beacon timing (m)");
Serial.println("mpa= path");
Serial.println("mra= beacon text including symbol, table and coordinates");
Serial.println("mpv= voltage in beacon");
Serial.println("send sending beacon");
Serial.println("cls clearing eeprom memory");
Serial.println("mem writing current config to memory");
Serial.println("reset reload device");
Serial.println("help,? printing this manual");
}
//obowiązkowo setupik na starcie
void setup(){
pinMode(napiecie_zasilania_pin,INPUT);
QAPRS.init(0,0);
Serial.begin(9600);
read_from_eeprom_or_make_default();
}
//petla główna
void loop() {
unsigned long time = millis();
//słuchamy eresa
while(Serial.available()) {
char character = Serial.read();
content.concat(character);
delay (10);
}
if (content != "") {
content.trim();//wywalamy CR i LF z wchodzących stringów
time_to_beacon = time + (beacon_interwal*60000);
//zmiana znaku
if(content.substring(0,4) == "mca="){
content.substring(4).toCharArray(from_addr,7);
int by_position = content.indexOf('-')+1;
ssid = content.substring(by_position).toInt();
}
if(content.substring(0,4) == "mti="){
beacon_interwal = content.substring(4).toInt();
//Serial.print(a);
}
if(content.substring(0,4) == "mpa="){
content = content.substring(4);
int dlugosc = content.length()+1;
content.toCharArray(relays,dlugosc);
}
if(content.substring(0,4) == "mpv="){
if(content.substring(4) == "1"){
volt_indic = 1;
}
if(content.substring(4) == "0"){
volt_indic = 0;
}
}
if(content.substring(0,4) == "mra="){
content = content.substring(4);
int dlugosc = content.length()+1;
content.toCharArray(comment_arr,dlugosc);
}
if(content.substring(0,4) == "send"){
prepare_and_send_beacon_f();
}
if(content.substring(0,3) == "cls"){
clear_eeprom_memory();
}
if(content.substring(0,3) == "mem"){
save_to_eeprom();
}
if(content.substring(0,5) == "reset"){
softReset();
}
if(content.substring(0,4) == "help"){
print_help();
}
if(content.substring(0,1) == "?"){
print_help();
}
content = "";
}
//jesli ramka co minute to nie wysylamy nic takie zabezpieczenie jesli konfig nie wgrany
if (time >= time_to_beacon && beacon_interwal!= 1){
prepare_and_send_beacon_f();
time_to_beacon = time + (beacon_interwal*60000);
}
}
Kod jest do uporządkowania, piszę w arduino dopiero trzeci tydzień.
Do tego napisałem aplikację na pc w lazarusie do konfiguracji płytki...
Ogólnie trzeba jeszcze sporo nad tym popracować, jak ktoś ma ochotę to zapraszam do zabawy.
29-07-2013, 19:22
Co do książki Spraw by rzeczy przemówiły ... i arduino książka jest bardzo fajna lecz niestety moim zdaniem mało przydatna dla krótkofalowca gdyż skupia się w dużej mierze na obsłudze sieci -współpracy z internetem (co mi się bardzo podoba), języku procesing ale nie na rzeczach interesujących dla zaczynających zabawę z procesorami i pragnących wykonać np., sterownik syntezy czy jakiś układ przydatny w pracy krótkofalarskiej.
29-07-2013, 19:31
W zasadzie doszedłem do podobnego wniosku co Rafał. Miałem w ręku przejrzałem i jednak zdecydowałem że nie kupię i będę eksperymentował z pomocą internetu
29-07-2013, 20:09
Drugą książką polskojęzyczną poświęcono Arduino jest: Inteligentny dom Automatyzacja mieszkania za pomocą platformy Arduino systemu Android i zwykłego komputera. Opinia taka sama jak powyżej.
Dwa ciekawe linki :
http://wiring.org.co/learning/basics/index.html
http://hacknmod.com/hack/top-40-arduino-...f-the-web/
Ryśku z jakiegoś podręcznika do lazarusa korzystasz czy z netu, w sumie to obiektowy pascal czyli coś bez problemu powinno się dać znaleźć.
Co do książki o arduino to mogę z czystym sercem polecić może niedokładnie o arduino ale niezwykle pomocną szczególnie dla początkujących
Języki C i C++. Twój pierwszy program no i wręcz kultowa pozycja
Język ANSI C autorzy K&R
Dwa ciekawe linki :
http://wiring.org.co/learning/basics/index.html
http://hacknmod.com/hack/top-40-arduino-...f-the-web/
Ryśku z jakiegoś podręcznika do lazarusa korzystasz czy z netu, w sumie to obiektowy pascal czyli coś bez problemu powinno się dać znaleźć.
Co do książki o arduino to mogę z czystym sercem polecić może niedokładnie o arduino ale niezwykle pomocną szczególnie dla początkujących
Języki C i C++. Twój pierwszy program no i wręcz kultowa pozycja
Język ANSI C autorzy K&R