ah, pow. Insåg i natt när jag skulle sova att IDEn kanske lägger till bibliotek åt mig.
ah, pow. Insåg i natt när jag skulle sova att IDEn kanske lägger till bibliotek åt mig.
en pulsgenerator är det jag ska göra, till små kontakthögtalare.This quote is hidden because you are ignoring this member.
Okej, försökte skicka in den i min ATtiny85 nu, nu är programmet 3338 bytes (??? Klagar inte, men va?) men jag får "An error occurred while uploading the sketch"
Det här är en lärorik vecka.
Har du verkligen inget mera än koden du visade?This quote is hidden because you are ignoring this member.
#include eller variabler?
Näpp, det är inklistrat från textfältet. Men jag har något tjall med installationen, har nu bytt till IDE 10.1, sedan till 10.6.5, hoppas få liv i den nu. Det är något med olimexinon som kortet är i. Hade kunnat köra teensyn som ISP bara, men lill-kortet kostade typ en femtiolapp med en attiny85, så...
Ska tyvärr till jobbet nu, men det verkar ju ordna sig. Fast jag tror jag får köra attiny45? Siktade på 25 men verkar inte få in programmet. Eller menar du att det borde bli mindre än 3k?
Kul!This quote is hidden because you are ignoring this member.
Ja, det borde vara mindre men kom på varför den är så stor.This quote is hidden because you are ignoring this member.
ATtiny har ingen hårdvarumultiplikation så all din matematik måste göras av math.h i mjukvara.
Därav storleken.
Om det du vill göra går att göra med bitshift så skulle jag rekommendera det.This quote is hidden because you are ignoring this member.
Jag får testa. Kanske kan skita i pow också. Hade varit skönt att köpa attinys för halva priset eftersom jag har tänkt göra ett gäng såna här.This quote is hidden because you are ignoring this member.
Du kanske kan lösa dina uträkningar med tabeller istället?This quote is hidden because you are ignoring this member.
Det brukar jag göra men mest för att optimera hastighet.
Man löser alla tänkbara lösningar på ekvationen, stoppar dom i en tabell och programmet vet i förväg svaret på varje uträkning.This quote is hidden because you are ignoring this member.
Jag vet att det är för mycket för dig just nu och löser inte utrymmet.
Acceptera 3,3Kb och kör.
aaaah. Det hoppar jag över.
Jo, så blir det nog. Ska försöka få ordning på installationen, sedan göra några försök med bit shift. Men det är ändå skönt, jag trodde ju programmet låg på 22k, kändes helt jävla hopplöst att pyssla mer mini-data då...
På mina ATtiny oscillator chip så mappar analogread mot en tabell på 1024 entryn för att ge 1volt/oktav oscillator frekvens.
Finns inte en chans att det chippet utan hårdvarumultiplikation skulle klara att räkna ut den logaritmiska skalan inom tid annars.
Ja, men för hastighetsoptimering.This quote is hidden because you are ignoring this member.
Inte för utrymme.
Om om en tabell blir mindre än mathlib så javisst.
Nä, precis. Vet inte om hastighet blir en grej att tänka på för mig än. Hur vet man hur många instructions en grej tar att göra? Säg, en analogRead eller en case switch?
På min dsp-G1 så använder jag 3997bytes av flash.
Det är en ARM och med 32bit hårdvarumultiplikation och barrelshift (det har inte AVR och du lär dig snart varför du behöver det) och den har 4096bytes flash.
Det är tight men jag har lyckats klämma in pitchbend också fast aldrig släppt det i produktion.
På 4kb är det en 5 röster parafonisk VA synth med filter och vca.
Allt är ett pussel.
Om det blir trångt, tänk om.
Det finns alltid en lösning.
Men mecklenburg. Antog att den (förvisso billiga) attiny-programmern jag har köpt kunde flasha 25or och 45or också. Det är såklart ingen självklarhet... Well well. Går väl att använda teensyn som ISP om det nu inte går.
(dessutom måste man rycka USB varje gång man tutar i koden... Kommer tröttna på det fort).
Arduinolib är segt eftersom det måste hantera många olika AVR och numera även ARM.This quote is hidden because you are ignoring this member.
Jag tänker inte leda in dig på hur man optimerar om du är nybörjare.
Det är bättre att du lär dig och känner dig hemma.
Men ett analogread läser på adc's omvandlingsfrekvens som är 9.3khz och är blocking.
Med blocking menas att anropet eller funtionen inte återvänder utan resultat =väntar.
Ung 100uS får du vänta på ett analogread.
När man blir varm i kläderna så väntar man inte utan låter omvandligen ske medans man gör annat.
Programmera AVR gör du med en billig (30kr) Arduino Nano från Kina och Arduino ISP sketchen som finns implementerad i IDE.This quote is hidden because you are ignoring this member.
Har jag gjort med snart 700st chip utan problem.
Jo, men jag behövde en nu. Men lär inte fortsätta använda den här, blir nog något i den stilen (fast, pallar nog inte vänta på Kina).
1700 bytes nu, med bitshift. Den tickar på, fast tystare än innan trots fräscht batteri (???) och läser inte på något, vare sig analog- eller digitalRead. SKUMT
Skicka ett PM så får du en Nano förprogrammerad med Arduino ISP.This quote is hidden because you are ignoring this member.
Varför måste du banta om det platsar och du ska åka till UK om 2 dagar?This quote is hidden because you are ignoring this member.
Bara provade en shift, jag tror inte det är det som gör att den inte gör analogRead? Men, jag kan ju testa med vanlig multiplikation.This quote is hidden because you are ignoring this member.
(kan vara lite hårdvarustrul också...)
- - - Updated - - -
Här är jag nu:
Kod:void setup() { pinMode(0, OUTPUT); pinMode(4, INPUT); //trimmer pinMode(2, INPUT); //switch } void loop() { digitalWrite(0, HIGH); // click delayMicroseconds(100); digitalWrite(0, LOW); int mode = 0; int trimmer = 0; mode = analogRead(2); //read switch trimmer = analogRead(4); //read trimmer if (mode > 20 ) { delay((trimmer<<2)+trimmer+40); } delay(random (trimmer<<2+1,(trimmer+23)<<2+1)); }
Skippa pinmode på GPIOs som är analoga.
Ska det heta analogRead(4) eller analogRead(A0) osv som jag skrev till Teensyn? Fick för mig att jag bara skulle numrera dem, A0 är ju sån "blå" kod som HIGH, LED_BUILTIN osv. Sån specialarkod.
Hm... den verkar läsa, fast allt är inte helt hundra (och mode läser den inte alls, den är bara noll (eller < 512) jämt. Nu ska jag ta en öl. Tack för hjälp & pepp!
- - - Updated - - -
^This quote is hidden because you are ignoring this member.
en sann hjälte.
Det spelar ingen roll om du skriver 4 eller A4 på analogRead.
De mappar lika.
Det finns andra egenheter mappade på analoga pins som vi inte behöver ta upp just nu.
Därför att Arduino gör sina egenheter när det gäller analogRead.This quote is hidden because you are ignoring this member.
Skulle du råka skriva pinMode (x, INPUT_PULLUP) och använda den porten som analog som får du problem.
Det finns andra potthåll att ramla i också.
Ok. Trodde ett tag att jag behövde pullup eller ngt när sen inte läse. Undear fortfarande vad som är grejen... känns som att den läser ratten "lite", men otydligt (att det är slump med i bilden underlättar ju inte). Ska nog trsta lite enkla grejer imorgon, för att få ordning på saken.This quote is hidden because you are ignoring this member.
Hm. Har mätt och testat, kopplat å 78l05 och kör nu på 9v-batteri (så att trimpoten ger 0-5v istället för 0-3.3v). Har tagit bort delar av koden. Den gör inte analogRead, känns det som. Har inte fått min "switch" (en sladd jag kopplar i/ur att funka öht, den är alltid i ena läget. Jag har in mig på rätt pinnar. Utgången funkar ju, kopplat som jag har gjort.
Jag börjar undra om det inte är mitt jävla kopplingsdäck och dess sladdar som ligger bakom alla problemen. Jag gillar inte kopplingsdäck, alla är så förbannat kina-kexiga. Finns det inga kopplingsdäck gjorda i tyskland eller så?
Ok... Deras namngivning av pins är vansinnig... och orimligt svår att hitta på internet.
https://engineerzero.blog/2013/05/07...-ide-sketches/
Men: bitwise var bra, fast jag får inte riktigt det periodiska att funka, det står typ still/går oändligt långsamt.
Och: ATtiny85 verkar klara att man kopplar på strömmen baklänges
Så. Nu ska jag bygga tio stycken. Blä vad mycket tid och energi som gick åt till det här puckade problemet...
Inte hann jag bygga tio stycken. Men men. Jag har roligare planer. Först:
https://learn.adafruit.com/multi-tas...itch-the-delay
(tänkte tipsa för andra noobs som hittar till tråden)
Kom på att jag fortfarande inte skickat en Nano med ISP.
Suck. Skulle programmera idag (Teensy 3.2). Fick inte upp den i Arduino IDEn, vet inte varför, avinstallerade, installerade nytt. För nytt, för när jag skulle installera Teensyduino hittade den inte 1.8.2 (jag hade 1.8.4). Sist jag höll på och kämpade körde jag 40-11 olika versioner fram och tillbaks. Jävla Digispark. Nu kör jag 1.8.2 om mina grejer funkar (kör inte Digispark mer) och sen är jag fan nöjd.
(fick inget gjort)
Lägg till den som Json.This quote is hidden because you are ignoring this member.
Har säker 10 olika brädor utöver Arduino standard.
Men å andra sida vågar jag inte uppa från 1.6
Har för mycket på spel.
Deras IDE-bestyr verkar onödigt bökiga. Jag hade 1.6 förut, vet inte vad det var som inte funkade med det. Å andra sidan behöver jag inte tänka så fasligt mycket på det här på den datorn jag sitter på nu, hoppas gå över till mac (hackintosh) igen snart.This quote is hidden because you are ignoring this member.
Är någon version mer kompatibel/använd än andra? Min instinkt vad gäller mjukvaruversioner säger mig att den senaste = kass. Har försökt anpassa mig till att uppdatera grejer och så, med resultatet att min mac (hackintosh) blev obrukbar. Puckat att uppgradera en sådan grej utan koll, jag ville bara vara normal. -_-
Ja, det senaste ger nog problem.
Men jag har ett ansvar gentemot mina kunder.
Därför har jag stannat på 1.6 just nu.
Man kan ha flera olika installationer på datorn annars.This quote is hidden because you are ignoring this member.
Ja, jag har både 1.0 och 1.6This quote is hidden because you are ignoring this member.
Just nu tillför inte 1.8 något.
Ah, bara man installerar på olika ställen? För när jag försökte installera 1.8.2 sade datorn "du måste ta bort 1.8.4 först".This quote is hidden because you are ignoring this member.
Nu är jag igång igen. Tänkte göra en miniräknare :-) fast för oljud, då. Men jag har också hundra andra saker jag vill göra. Å andra sidan känns det som ett väldigt lätt program, bara switch case för att välja läge, och så lite olika (åtta) ekvationer den gör kontinuerligt. Det blir som en loop bara, 1. välj läge 2. gör uträkning enligt läge på inputs a, b, c. goto1.
Vi får väl se. Måste får ordning på dac också, såklart. Och att se till att inputs inte överskrider 5v (det är väl iofs lätt fixat).
Jag är med igång. Det känns väldigt kul och ganska lätt, inte så att jag kan allt utan det känns lätt och roligt att testa grejer. Samtidigt börjar jag undra över hur det är möjligt att jag har gått fem år (!!) på musikhögskola, plus två år kompositionsfolkis, med inriktning på elektronisk konstmusik, och ingen har satt en Arduino i händerna på mig och sagt "gör något". Jag var iofs hyfsat självgående, men en grundkurs och ett projekt så man kommer igång hade ju hjälpt jättemycket, särskilt med tanke på att många exempel på internet är väldigt förvirrande för en nybörjare (tycker jag). Det var så jag kom igång med MaxMSP och det har hjälpt mig enormt, och efter den typ fyradagarskursen lärde jag mig det och kan det skitbra. Perfekt problemlösare.
Plus att då hade jag eoner av tid att sitta och göra sånt här, hade varit fint att köra Arduino då. Nu har jag inte alls lika mycket tid och inte heller kvar det maniska fokus jag hade då. Tänk om jag hade lagt det på Arduino... Jag hade liksom ingen aning om var jag skulle börja.
Det jag gör nu bygger på någons DDS-kod, gör en synt med Dirty Electronics (http://maxwainwright.com/#in-house-press) med en sinustabell som läses huller om buller. Tyvärr kan jag inte begripa hur den funkar eftersom allt är register och sånt
typ
osvKod:TCCR0A = (TCCR0A | _BV(COM0A1)) & ~_BV(COM0A0); // COM0B = 0b00, OC0B disconnected (Table 14-6) TCCR0A &= ~(_BV(COM0B1) | _BV(COM0B0)); // No prescaler, CS = 0b001 (Table 14-9) TCCR0B = (TCCR0B & ~(_BV(CS02) | _BV(CS01))) | _BV(CS00); // Set initial pulse width to the first sample. OCR0A = pgm_read_byte(&sinewave_data[0]);
Vilket jag gärna ger mig in i i framtiden, inte just nu bara.
Så en sak jag undrar är, om jag vill göra en enkel "pulser" som bara tickar och kan styras med 0-1023, var bör jag börja? Jag har sett den om millis() men jag vet inte om det är rätt väg. Dels är millisekunder för långsamt för ljud (om man t.ex. kikar i en tabell), den verkar gjord för att blinka lysdioder. Det finns iofs micros() istället. Är det en bra väg? T.ex. om man vill göra en sample and hold-funktion i en 328p, kan man få det fort nog, alltså typ 30KHz? Eller om man vill läsa igenom en tabell?
Det finns ju koden vi använder i den vi håller på med (den här frågan gäller kommande grejer jag vill göra) men jag fattar inte vad som är "output" i den eller hur jag använder det den gör. Eller hur man har flera sådana igång samtidigt.
Det jag vill ha är väl i princip en ackumulator. Det är väl det millis och micros är, så det kanske är de jag ska ha. Och så styr jag frekvensen genom att säga hur mycket den ska ha ökat för att x ska ske? ... konsten att svara på sin egen fråga
Men om det finns andra vägar är jag tacksam för tips :-)
Problemet med millis och micros funktionerna är att eftersom Arduinon bara har en tråd (single task) så låser du CPUn under din paus.
Har du andra saker som skall hända eller kollas så kan den inte det utan missar händelser.
Det rätta sättet om du vill ha en delay är att skriva kod som kan göra annat om din tid inte är uppfylld.
Inte låsa CPUn.
Du menar inte delay() och delayMicros()? För de vet jag att jag ska undvika. Vad jag har förstått ger millis och micros bara en tidpunkt, som man kan testa när man vill.This quote is hidden because you are ignoring this member.
Du har rätt.This quote is hidden because you are ignoring this member.
Missförstånd av mig.
millis() och micros() har jag för mig bara räknar upp antalet respektive tidsenheter sedan programmet startades. De är således inte låsande och kan mycket väl användas till det du är ute efter.
Om jag förstår ditt behov rätt kan du skapa så många variabler du behöver och initiera dem med värdet av exempelvis millis().
unsigned long tid1 = millis();
unsigned long tid2 = millis();
Sen använda dessa för jämförelser
do {
if (millis() - tid1 > 100) {
tid1 = millis(); // 100 ms har gått sen seanst tid1 sattes
}
if (millis() - tid2 > 110) {
tid2 = millis(); // 110 ms har gått sen senast tid2 sattes
}
} while(1);
Men snälla Johey, programmerar du på Arduino/AVR?
Inga long variabler, det är 4 bytes för en 8-bit cpu att hantera?
Bränn cykler, bara bränn.
This quote is hidden because you are ignoring this member.