Val av mikroprocessor till husvagnsprojekt
-
- Inlägg: 58
- Blev medlem: 6 september 2012, 11:15:33
- Ort: Göteborg
Re: Val av microprosessor till husvagnsprojekt
Lawicel AB har lagt ut en nybörjarkurs för Arduino på svenska på sin blogg. De har tyvärr inga lektioner för hur man styr displayer, men det är nog en bra kurs att börja med. Speciellt om man inte har så mycket erfarenhet sedan tidigare.
http://www.lawicel.se/blog/?page_id=359
http://www.lawicel.se/blog/?page_id=359
Re: Val av microprosessor till husvagnsprojekt
Nu kan jag inget om Arduino men visst sitter det en AVR i den? Vilket språk är det tänkt att man ska använda?
Jag håller på med AVR och är i princip nybörjare. Jag började att försöka lära mig att skriva kod i C men eftersom jag aldrig fattade vad som "egentligen hände" så var det väldigt svårt att få till något eget program. Blev mest klippa och klistra från nätet och ändra lite.
Sedan började jag skriva i assembler. Snacka om att det kändes enklare att förstå, det går ju att för sin inre syn föreställa sig vad som helst, typ att man har en byrå med olika byrålådor som motsvarar de olika minnesutrymmena och registren. Så stoppar man en byte i en viss byrålåda för att kunna hitta det sen. Vissa värden får inte plats i en låda utan kräver flera. Stacken är en låda fast med papper i som läggs uppe på varann så att "sist in först ut" gäller. Vissa byrålådor fungerar bara till vissa saker så att man måste flytta omkring sina värden i vissa fall.
Det kändes mycket lättare att försöka sig på C igen efter att man förstått assembler tyckte jag.
Sen anser jag att batteri-spänningen är en bra info. Jag har gjort en mätare i båten. Man vet ungefär vilken spänning det brukar vara, och så ser man hur mycket det "faller" när man startar olika förbrukare. Men det finns ju naturligtvis fler sätt att veta hur mycket ström man har kvar.
Jag håller på med AVR och är i princip nybörjare. Jag började att försöka lära mig att skriva kod i C men eftersom jag aldrig fattade vad som "egentligen hände" så var det väldigt svårt att få till något eget program. Blev mest klippa och klistra från nätet och ändra lite.
Sedan började jag skriva i assembler. Snacka om att det kändes enklare att förstå, det går ju att för sin inre syn föreställa sig vad som helst, typ att man har en byrå med olika byrålådor som motsvarar de olika minnesutrymmena och registren. Så stoppar man en byte i en viss byrålåda för att kunna hitta det sen. Vissa värden får inte plats i en låda utan kräver flera. Stacken är en låda fast med papper i som läggs uppe på varann så att "sist in först ut" gäller. Vissa byrålådor fungerar bara till vissa saker så att man måste flytta omkring sina värden i vissa fall.
Det kändes mycket lättare att försöka sig på C igen efter att man förstått assembler tyckte jag.
Sen anser jag att batteri-spänningen är en bra info. Jag har gjort en mätare i båten. Man vet ungefär vilken spänning det brukar vara, och så ser man hur mycket det "faller" när man startar olika förbrukare. Men det finns ju naturligtvis fler sätt att veta hur mycket ström man har kvar.
Re: Val av microprosessor till husvagnsprojekt
Egentligen är det tre saker man behöver förstå för att kunna programmera en AVR i C:
1) Programspråket C - läs en grundbok och öva i ett gratisprogram på din PC, t.ex. CodeBlocks.
2) Förstå en AVR, dvs. dess uppbyggnad med de olika inbyggda periferienheterna: CPU, ALU, programminne, ram-minne, EEPROM. I/O (portar), USART, SPI, Timers, AD-omvanddlare och så vidare. Det hittar du antingen i boken "MIKROPROCESSORTEKNIK" av Per Foyer, eller Googlar. Det är här du måste börja titta på databladet också, för att i detalj se hur du styr och kommunicerar med de olika enheterna, via "register".
3) AVR-GCC dokumentationen - dvs. de C-bibliotek som finns till AVR, och speciellt de makron som definierar alla registren i en viss AVR-krets. Det är dessa som gör att du kan skriva PORTB = (1 << PB1); fast språket C i sig inte vet vad PORTB är för något.
Sedan ska man kunna få ihop det här... Det normala i C är att man anropar en funktion för att t.ex. skriva ut data eller vad man nu vill göra. Meni AVR-GC är det ofta bara ett macro som motsvarar en minnesadress. Det beror på att registren som styr de olika enhterna (I/O, timers etc.) är en del av RAM-minnet, och finns i "minnesrymden". Så för att skriva till en port så skriver man alltså en byte till en position i minnet.
Har man lärt sig assembler först har man ofta förstått mer i detalj hur registren fungerar och hur de adresseras. Deta är en fördel när man sedan börjar med C. Men egentligen borde man inte behöva gå den omvägen, då man skriver exakt samma sak i C som i assembler:
assembler:
ldi register16, 0x40
out PORTB, register16
C:
PORTB = 0x40;
1) Programspråket C - läs en grundbok och öva i ett gratisprogram på din PC, t.ex. CodeBlocks.
2) Förstå en AVR, dvs. dess uppbyggnad med de olika inbyggda periferienheterna: CPU, ALU, programminne, ram-minne, EEPROM. I/O (portar), USART, SPI, Timers, AD-omvanddlare och så vidare. Det hittar du antingen i boken "MIKROPROCESSORTEKNIK" av Per Foyer, eller Googlar. Det är här du måste börja titta på databladet också, för att i detalj se hur du styr och kommunicerar med de olika enheterna, via "register".
3) AVR-GCC dokumentationen - dvs. de C-bibliotek som finns till AVR, och speciellt de makron som definierar alla registren i en viss AVR-krets. Det är dessa som gör att du kan skriva PORTB = (1 << PB1); fast språket C i sig inte vet vad PORTB är för något.
Sedan ska man kunna få ihop det här... Det normala i C är att man anropar en funktion för att t.ex. skriva ut data eller vad man nu vill göra. Meni AVR-GC är det ofta bara ett macro som motsvarar en minnesadress. Det beror på att registren som styr de olika enhterna (I/O, timers etc.) är en del av RAM-minnet, och finns i "minnesrymden". Så för att skriva till en port så skriver man alltså en byte till en position i minnet.
Har man lärt sig assembler först har man ofta förstått mer i detalj hur registren fungerar och hur de adresseras. Deta är en fördel när man sedan börjar med C. Men egentligen borde man inte behöva gå den omvägen, då man skriver exakt samma sak i C som i assembler:
assembler:
ldi register16, 0x40
out PORTB, register16
C:
PORTB = 0x40;
- Krille Krokodil
- Inlägg: 4062
- Blev medlem: 9 december 2005, 22:33:11
- Ort: Helsingborg
Re: Val av microprosessor till husvagnsprojekt
Det är betydligt enklare att komma igång med Arduino C och inte heller bortkastade pengar om man senare vill gå över till assembler/GCC, man kan ladda upp ett program i den som gör den till ISP-programmerare som man då kan använda ihop med bl a Atmel Studio.
Re: Val av microprosessor till husvagnsprojekt
TobiasEinarsson skrev:Lawicel AB har lagt ut en nybörjarkurs för Arduino på svenska på sin blogg. De har tyvärr inga lektioner för hur man styr displayer, men det är nog en bra kurs att börja med. Speciellt om man inte har så mycket erfarenhet sedan tidigare.
http://www.lawicel.se/blog/?page_id=359
Tack så mycket för tipset, för idag dök det nämligen upp ett litet paket på posten till mig

Så det är bara att sätta igång!
Re: Val av microprosessor till husvagnsprojekt
Tänkte komma med en liten uppdatering hur det går just nu. Det som har hänt sedan sist är att jag har har fått igång displayen
, skriver ut lite fin text samt visar hur många liter vatten jag har kvar i tanken med korrekt skalning. Jag la förutom det till att en liten fin diod tänds när det är under 10liter vatten kvar.
Men där jag står just nu är att jag hade tänkt mig en funktion som jag inte riktigt får till. Tanken är att jag har en knapp för att byta visning på displayen. Typ att "startsidan" är vattennivån, ett knappstryck så visar den nästa sida som kanske är strömförbrukning, ytterligare ett så visar den nästa för att slutligen komma tillbaka till vattennivån.
Är det någon här som har gjort något liknande?

Men där jag står just nu är att jag hade tänkt mig en funktion som jag inte riktigt får till. Tanken är att jag har en knapp för att byta visning på displayen. Typ att "startsidan" är vattennivån, ett knappstryck så visar den nästa sida som kanske är strömförbrukning, ytterligare ett så visar den nästa för att slutligen komma tillbaka till vattennivån.
Är det någon här som har gjort något liknande?
Re: Val av microprosessor till husvagnsprojekt
Det kallas "Menysystem" och används väldigt mycket.
För min del löser jag det vid att ha en räknare som har lite egenskaper:
* Räknar upp med 1 för varje tryck på "Meny"-knappen.
* När den har räknat till högsta menypunkt + 1 ställs den till noll och den är tillbaka till början.
* När en knapp aktiveras nollställs en tidräknare men om den tidräknare överstiger ett visst värde (oftast 5 minuter) nollas Meny-räknaren.
Med detta klart kan meny-räknaren bestämmas till att visa vilket värde man vill, kanske ställa in parameter osv. Exakt hur man löser det beror på vad som ska lösas, är det enbart visning av "Text x: värde y" kan man lösa det med en tabell som det indexeras i med meny-räknaren.
För min del löser jag det vid att ha en räknare som har lite egenskaper:
* Räknar upp med 1 för varje tryck på "Meny"-knappen.
* När den har räknat till högsta menypunkt + 1 ställs den till noll och den är tillbaka till början.
* När en knapp aktiveras nollställs en tidräknare men om den tidräknare överstiger ett visst värde (oftast 5 minuter) nollas Meny-räknaren.
Med detta klart kan meny-räknaren bestämmas till att visa vilket värde man vill, kanske ställa in parameter osv. Exakt hur man löser det beror på vad som ska lösas, är det enbart visning av "Text x: värde y" kan man lösa det med en tabell som det indexeras i med meny-räknaren.
Re: Val av microprosessor till husvagnsprojekt
Precis Icecap, det är den funktionen jag är ute efter. Dock så har jag försökt läsa mig till på nätet hur man rent kodmässigt ska kunna lösa det som du beskriver det. Utan någon större framgång tyvärr..
Där jag har letat mest är på Arduinos hemsida (http://arduino.cc/en/Tutorial/HomePage), är det så att jag bara har missat det eller kan du hitta det? Alternativt om du kunde posta en liten snutt på din kod, så borde jag lösa problemet sen
Där jag har letat mest är på Arduinos hemsida (http://arduino.cc/en/Tutorial/HomePage), är det så att jag bara har missat det eller kan du hitta det? Alternativt om du kunde posta en liten snutt på din kod, så borde jag lösa problemet sen

Re: Val av microprosessor till husvagnsprojekt
Om du bara vill byta bild enligt ett fast rullande schema (vilket ju är helt OK
om det är 4-5 "bilder"), så skulle jag inte vilja kalla det för ett "menysystem".
Att bara rulla runt mellan bilderna är också väldigt mycket enklare än ett
normalt menysystem där man t.ex ska kunna välja bild o.s.v.
> Dock så har jag försökt läsa mig till på nätet hur man rent kodmässigt ska
> kunna lösa det som du beskriver det. Utan någon större framgång tyvärr..
Väldigt svårt att kommentera då du varken berättar eller visar vad du har gjort.
Men i princip behöver du:
- En funktion som läser av (eller reagerar på) en tryckning på en knapp. Det
kan göra lite olika beroende på t.ex vad som ska hända om användaren inte
direkt släpper knappen, ska bilderna t.ex börja rulla/bytas automatiskt?
Den funktion visar inget, den bara justerar en varabel för <bild-nummer>.
- Du behöver en rutin/funktion per bild som ritar upp just den bilden.
- En funktion centralt i din applikation som beroende på <bild-nummer> visar
den aktuella bilden, jag gissar an den kanske uppdateras någon eller några
gånger per sekund (?). I samband med det kan man även se till att rätt
bild visas.
Eller något liknande, detaljerna beror väldigt mycket på hur du vill att det
hela ska fungerar på, just, detaljnivå...
om det är 4-5 "bilder"), så skulle jag inte vilja kalla det för ett "menysystem".
Att bara rulla runt mellan bilderna är också väldigt mycket enklare än ett
normalt menysystem där man t.ex ska kunna välja bild o.s.v.
> Dock så har jag försökt läsa mig till på nätet hur man rent kodmässigt ska
> kunna lösa det som du beskriver det. Utan någon större framgång tyvärr..
Väldigt svårt att kommentera då du varken berättar eller visar vad du har gjort.
Men i princip behöver du:
- En funktion som läser av (eller reagerar på) en tryckning på en knapp. Det
kan göra lite olika beroende på t.ex vad som ska hända om användaren inte
direkt släpper knappen, ska bilderna t.ex börja rulla/bytas automatiskt?
Den funktion visar inget, den bara justerar en varabel för <bild-nummer>.
- Du behöver en rutin/funktion per bild som ritar upp just den bilden.
- En funktion centralt i din applikation som beroende på <bild-nummer> visar
den aktuella bilden, jag gissar an den kanske uppdateras någon eller några
gånger per sekund (?). I samband med det kan man även se till att rätt
bild visas.
Eller något liknande, detaljerna beror väldigt mycket på hur du vill att det
hela ska fungerar på, just, detaljnivå...
Re: Val av microprosessor till husvagnsprojekt
”ugh” ?AndersG skrev:Och det beror ganska mycket på vad man kodar i. Assembler, så får man plats med mycket. C eller (ugh) Basic får man plats med mindre. Detta förutsatt att man kan koda i assemblerDet som brukar ta slut fortast i en liten processor är det interna flashminnet.
Nu vet jag inte hur bra Basic kompilatorerna fungerar på AVR (som jag hoppade av för länge sedan) men med PIC Basic så blir den kompilerade koden inte större än asscode!
Det är bara BS.
Re: Val av microprosessor till husvagnsprojekt
Själva funktionen jag eftersöker är som jag skrev tidigare en gång,
"Men där jag står just nu är att jag hade tänkt mig en funktion som jag inte riktigt får till. Tanken är att jag har en knapp för att byta visning på displayen. Typ att "startsidan" är vattennivån, ett knappstryck så visar den nästa sida som kanske är strömförbrukning, ytterligare ett så visar den nästa för att slutligen komma tillbaka till vattennivån."
Eftersom jag är väldigt grön på det här så postar jag i slutet den lilla biten kod jag hittills har fått ihop. Så långt som jag har kommit idag är just den första "bilden" som visar aktuell vattennivå. Nästa "bild" kommer bli snarlik i koden, den ska visa aktuell temperatur på varmvattnet via en pt100 eller pt1000. Frågan är bara hur man går tillväga för att växla mellan dessa bilder då?
Som sagt är ganska ny på detta, hoppas ni har överseende med det:) Är grymt tacksam för all hjälp iaf!
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Anger vilka ingångar som används av LCD-display
int LCDval;
void setup(){
lcd.begin(16, 2);
pinMode(13, OUTPUT); // Sätter 13 till utgång
}
void loop()
{
lcd.clear(); //Rensar LCD från tidigare text
lcd.print("Water Level:"); // Text som visas på rad 1
int value = analogRead(0); // Val av ingång som skall läsas av
lcd.setCursor(0,1);
lcd.print(value/20); //Avläsnining av värdet från vald ingång, skalning av visning
lcd.setCursor(3,1);
lcd.print ("Liters");// Textrad efter analogt värde
if (value<205)digitalWrite(13, HIGH); //Tänder diod på pin13 om analogt värde understiger 205 eller 10liter
if (value>205)digitalWrite(13, LOW); //Släcker diod på pin13 om analogt värde överstiger 205 eller 10liter
delay(500);
}
"Men där jag står just nu är att jag hade tänkt mig en funktion som jag inte riktigt får till. Tanken är att jag har en knapp för att byta visning på displayen. Typ att "startsidan" är vattennivån, ett knappstryck så visar den nästa sida som kanske är strömförbrukning, ytterligare ett så visar den nästa för att slutligen komma tillbaka till vattennivån."
Eftersom jag är väldigt grön på det här så postar jag i slutet den lilla biten kod jag hittills har fått ihop. Så långt som jag har kommit idag är just den första "bilden" som visar aktuell vattennivå. Nästa "bild" kommer bli snarlik i koden, den ska visa aktuell temperatur på varmvattnet via en pt100 eller pt1000. Frågan är bara hur man går tillväga för att växla mellan dessa bilder då?
Som sagt är ganska ny på detta, hoppas ni har överseende med det:) Är grymt tacksam för all hjälp iaf!
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Anger vilka ingångar som används av LCD-display
int LCDval;
void setup(){
lcd.begin(16, 2);
pinMode(13, OUTPUT); // Sätter 13 till utgång
}
void loop()
{
lcd.clear(); //Rensar LCD från tidigare text
lcd.print("Water Level:"); // Text som visas på rad 1
int value = analogRead(0); // Val av ingång som skall läsas av
lcd.setCursor(0,1);
lcd.print(value/20); //Avläsnining av värdet från vald ingång, skalning av visning
lcd.setCursor(3,1);
lcd.print ("Liters");// Textrad efter analogt värde
if (value<205)digitalWrite(13, HIGH); //Tänder diod på pin13 om analogt värde understiger 205 eller 10liter
if (value>205)digitalWrite(13, LOW); //Släcker diod på pin13 om analogt värde överstiger 205 eller 10liter
delay(500);
}
Re: Val av microprosessor till husvagnsprojekt
Et ganska enkelt sätt är:
Utanför detta ska Meny-knappen räkna "runt" Meny_Index.
Kod: Markera allt
switch(Menu_Index)
{
case 0:
// Här kan man skriva ut vattennivå
break;
case 1:
// Här kan man skriva ut strömförbrukningen
break;
case 2:
// Här man man skriva ut annat
break;
case 3:
// Och här kan man skriva ut ytterligare saker
break;
}
Re: Val av microprosessor till husvagnsprojekt
> Frågan är bara hur man går tillväga för att växla mellan dessa bilder då?
Ja hur gör man...
Hur skulle du göra själv, om *du* var Arduinon?
Vad skulle du behöva för "input" o.s.v. ?
Vad skulle *du* behöva hålla reda på för att visa rätt bild?
Din kod förstår jag inte, hur körs "setup" resp "loop"?
Finns det ingen "main" eller liknande?
En knapp känner man enklast av genom att man (t.ex via en timer)
regelbundet (säg 10-20 gånger/sek) kollar om knappen är intryckt eller inte.
Sedan agerar man på detta och om man bestämmer sig för att någon
faktiskt trycker på knappen (inte bara en störning) så gör man det som
ska göras om någon trycker på knappen. O.s.v......
Ja hur gör man...

Hur skulle du göra själv, om *du* var Arduinon?
Vad skulle du behöva för "input" o.s.v. ?
Vad skulle *du* behöva hålla reda på för att visa rätt bild?
Din kod förstår jag inte, hur körs "setup" resp "loop"?
Finns det ingen "main" eller liknande?
En knapp känner man enklast av genom att man (t.ex via en timer)
regelbundet (säg 10-20 gånger/sek) kollar om knappen är intryckt eller inte.
Sedan agerar man på detta och om man bestämmer sig för att någon
faktiskt trycker på knappen (inte bara en störning) så gör man det som
ska göras om någon trycker på knappen. O.s.v......
Re: Val av microprosessor till husvagnsprojekt
http://www.coagula.org/content/pages/tu ... ay-arduino
Här finns ett tutorial om hur man kopplar ihop en Arduino Uno med en LCD, samt programmerar en meny till den.
(Jag kopierade länken från en annan aktuell tråd här på forumet)
Här finns ett tutorial om hur man kopplar ihop en Arduino Uno med en LCD, samt programmerar en meny till den.
(Jag kopierade länken från en annan aktuell tråd här på forumet)
Re: Val av microprosessor till husvagnsprojekt
Sodjan:
I Arduinio C så använder man "Setup" för kod som bara skall köras en gång och "Loop" för själva programloopen. Inget mer behövs.
I Arduinio C så använder man "Setup" för kod som bara skall köras en gång och "Loop" för själva programloopen. Inget mer behövs.