Jag håller på med att knåpa ihop en RC monitor.
Följande funktioner finns/kommer finnas:
- 2 ingångar för monitorering av mottagarsignaler
- 2 utgångar till servos ESC etc
- USB interface för inställningar samt bootloader
- LCD display (alfanumerisk) för visning av information.
- möjlighet att koppla in extern GPS för fartmätning samt positionering (möjlighet till autopilot).
- 2 analoga ingångar för inkoppling av sensorer (t.ex. tempsensorer)
- batterivakt
kopplingschemat som det är på korten, dock har vissa smärre ändringar gjorts eftersom t.ex. det vart alldeles för mycket kontrast på LCDn kopplat direkt till jord och så har jag satt ett nollohmsmotstånd till 5v på USBn (jag var lite lat och orkade inte bygga nån automagisk bus/nonbuspowered switch):
Jag har försökt att göra kortet så flexibelt som möjligt så det ska kunna användas till lite allt möjligt.
EDIT: kontrasten var det inte alls nåt fel på bara man konfat displayen rätt...(men visst kan det vara bra att kunna justera den ändå)
Postat: 14 december 2008, 07:56:00
av stekern
Nu har jag mekat till bootloadern
Kan lägga upp koden om nån är intresserad
Måste bara städa lite i PC-programmet först, som det ser ut nu är com-portar hårdkodade osv.
För att komma in i bootloadern håller man nere menu-knappen samtidigt som man stoppar i USB-kontakten.
Postat: 14 december 2008, 08:58:00
av Walle
Det vore helt klart intressant med källkoden
Vore det inte en bra idé att även mäta mottagarackens spänning?
Postat: 14 december 2008, 09:03:26
av stekern
Det är just mottagarackens spänning den mäter på ADC6
Om man vill mäta någon annan batterispänning är det annars bara att ta en av de två analoga sensorportarna och ansluta.
Postat: 14 december 2008, 09:08:41
av Walle
Sorry, jag läste igenom ditt första inlägg på tok för snabbt, jag vet inte hur jag lyckades missa "-batterivakt"
Postat: 14 december 2008, 09:10:19
av thepirateboy
Spännande projekt, även om jag inte helt fattar vad en R/C monitor är.
Har för övrigt nästan gjort ett identiskt "universalkort". Perfekt när man labbar, det går snabbt att komma igång när man vill testa nya projekt.
Lägg gärna upp koden för PC-programmet.
För att hämta tillgängliga comportar, visa dom i en dropdownlist och sortera dom brukar jag använda följande kod:
private void LoadListboxes()
{
string[] ports = SerialPort.GetPortNames(); // Hämta portar
SortComPorts(ports);
foreach (string port in ports) // Visa i lista
{
lstPorts.Items.Add(port);
}
lstPorts.SelectedIndex = 0;
}
void SortComPorts(string[] rgstrPorts)
{
Array.Sort<string>(rgstrPorts, delegate(string strA, string strB)
{
int idA = int.Parse(strA.Substring(3)),
idB = int.Parse(strB.Substring(3));
return idA.CompareTo(idB);
});
}
Postat: 14 december 2008, 09:20:17
av stekern
R/C monitor är bara ett namn jag hittat på.
Jag ville från början bara göra en fail safe (alltså en sådan som slår ner på gasen när bilen/båten/flygplanet kommer utanför sändarens område)
men sedan kom jag bara på mer och mer saker som jag ville ha mer (brukar bli så ) så jag tycker inte att fail safe passade in på den längre.
kommunikationsprotokollet för bootloadern ser ut såhär:
(bl är bootloader, fl är laddningsprogrammet)
-----------------------------
fl: BL
returnerar:
bl: BL v#.##
där #.## är versionsnumret
-----------------------------
fl: CLEAR
raderar hela flashminnet (dock inte bootloadern)
bl: DONE
-----------------------------
fl: LOAD
laddar data till flashminnet
returnerar:
bl: READY
bl: storleken på en page
fl: antal bytes som kommer skickas (fyra bytes)
bl: returnerar 0x06
fl: skickar en page (dvs så många bytes som bl returnerade efter READY)
bl: returnerar 0x06
repetera de 2 ovanstående tills alla byte är skickade.
om den sista pagen inte går jämnt upp (dvs antal bytes inte är jämnt delbart med pagestorleken) så returnerar bl 0x06 när den har laddat de klart
-----------------------------
fl: EXIT
bl: hoppar till det laddade programmet
-----------------------------
fuse-inställningarna i atmega88an skall vara:
BootSize 1024 (bootreset 0xC00)
BootReset enablead
Postat: 18 december 2008, 21:20:19
av thepirateboy
Lysande, funkade hur bra som helst. Det var lite strul med sökvägar vid bootloaderkompileringen men sedan hoppade allt igång på första försöket.
Postat: 19 december 2008, 04:19:49
av stekern
aha, vad fint
vad var det för strul med sökvägarna?
Det kan bero på att bootloadern är en del av firmwaret som inte är moget att visas upp för allmänheten än, så jag plockade bara ut de saker som hörde till bootloadern.
Postat: 19 december 2008, 06:09:34
av thepirateboy
I LCD.h är main.h inkluderat som inte hittas. ON och OFF är inte definerat. string.h finns inte med. När man öppnar bootloader.aps så skapas en ny makefil i mappen default som länkar till filer i nån mapp som heter ... stefan... nånting. Det funkade om jag kopierade in den andra makefilen. Det var ungefär de problem jag hade.
Postat: 19 december 2008, 11:38:26
av stekern
ok, hade missat att jag inkluderar main.h i LCD.c för att få med ON och OFF deklarationerna.
Ska vara fixat nu, tog även bort alla absoluta sökvägar i projektfilen.
Postat: 23 december 2008, 06:00:03
av stekern
Gjorde en lite video som visar när jag testar meny-systemet.
det jag gör i videon är:
Kalibrerar kanal 1 (det som visas är tiden för en dutycycle, 14 ms först och 13 ms när den är kalibrerad)
Ställer in failsafe-värdet på kanal1 till 43% (dvs lite back)
knäpper av radion och bilen far iväg bakåt
Postat: 27 december 2008, 02:50:18
av Glenn
Intressant, jag har börjat litegrann på nåt liknande, men dn skulle inte alls ha lika mycket funktioner ..dock hade jag tänkt ha stöd för fler kanaler och att kunna styra fler funktioner genom kanal3 (och ev fler)
Fast bilden på schemat var usel, har du inte en i fullstorlek ?
Postat: 27 december 2008, 07:08:27
av stekern
Så, nu är schemabilden fixad.
Jag har en 3 kort + komponenter till övers, så hojta till om du är intresserad av ett av dem. Jag kan tänka mig att sälja de för självkostnadspris ca 500kr/50 + frakt.
Vill du ha fler kanaler kan du t.ex. skippa LCD'n och använda de portarna.
Anledningen till att jag valde 2 kanaler var för att jag änvänder OC1A och OC1B för att generera utsignalen, så det sköter sig helt på egen hand.
avläsningen sker genom att insignalens stigande flank genererar ett interrupt på int0 och int1 och sen använder jag timer0 och timer2 för att mäta pulslängden samt dutycykeln.
avläsningen borde gå att göra bättre genom att även låta fallande flanken generera ett interrupt i stället för att vänta i interruptrutinen tills signalen går låg som jag gör nu.
Som jag ser det är det inte ett problem att pressa in massa kanaler som man läser av eller pressa in massa kanaler som man skriver till, problemet blir när man skall läsa och skriva på samma gång.