Hulp gezocht programmeren ATtiny9

fatbeard

Honourable Member

Ik heb een wat curieuze timer functie nodig: twee outputs die na een digitaal instelbare tijd (15-60 min) na elkaar een puls geven; een ATtiny9 leek me daarvoor wel geschikt (veel ruimte heb ik niet).
Probleem is alleen dat ik geen programmeer omgeving voor de ATtiny heb en mijn programmeerkunsten wel wat (erg) roestig zijn...

Omdat het waarschijnlijk een one-off is heb ik weinig zin om er nu veel geld en tijd in te steken, dus ik zoek iemand die voor mij dit programmaatje in elkaar kan/wil steken en vervolgens in vijf van die chippies blazen (hoeft niet voor nix).
Alternatief is een hoop hulp om die omgeving op te zetten (LinuxMint) en wat pointers voor het programmeren: ik spreek geen C, bascom of dergelijken :o (knutsel alleen af en toe wat in Eagles' ULP).

In pseudo-code:

code:

set outputs L
enable pull-ups
read inputs as number 'delay' (0..3)
wait (<delay> + 1) * 15 minutes
pulse output1 H for 50ms
wait 2 seconds
pulse output2 H for 3 seconds
halt

De chipjes en een verloopsocket naar DIP is aanwezig.

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.

Hoi,

Een paar minuten typen en...

c code:



#define OUT1 3
#define OUT2 4
#define IN1  5
#define IN2  6

void delay_minutes (int m)
{
  while (m--)
    delay (60000);
}

void setup (void)
{
  int del; 

  pinMode (IN1, INPUT);
  pinMode (IN2, INPUT);
  digitalWrite (IN1,1);
  digitalWrite (IN2,1);

  pinMode (OUT1, OUTPUT);
  digitalWrite (OUT1,0);
  pinMode (OUT2, OUTPUT);
  digitalWrite (OUT2, 0);
  
  delay (1); // wait 1ms. 
  
  del = (digitalRead (IN2) << 1) | digitalRead (IN1);
  del ++;
  delay_minutes (del * 15);
  digitalWrite (OUT1, 1);
  delay (50);
  digitalWrite (OUT1, 0);
  delay (2000);
  digitalWrite (OUT2, 1);
  delay (3000);
  digitalWrite (OUT1, 0);
}
  
void loop (void)
{
  delay (100); 
}
  

Dit is de arduino code. Pinnummers zodanig dat ik het op een normale arduino zou moeten kunnen testen, maar moeten nog aangepast worden voor tiny9. Dan schijn je met een gewone arduino de tiny9 te kunnen programmeren, maar ik heb ook een usbasp.

Edit: Hmm. Het lijkt er op dat er geen standaard support voor attiny9 in arduino zit (ook niet via een externe boardmanager. Omdat ik hits kreeg op attiny9 arduino dacht ik dat dit wel zou bestaan, maar die hits kreeg ik omdat mensen projectjes beschrijven die de attiny9 met een arduino programmeren... Zucht).

Edit2: Voor "grote productie" kan je deze vier-IO chip gebruiken om 4 signalen te beheren. Maar voor kleine series is dit niet handig: Je hebt maar 3 te programmeren IOs, als je de "reset" als reset bewaart. Anders zijn ze effectief OTP. Ik raad aan om een 8-pin exemplaar te kiezen, zodat je WEL de reset gewoon reset kan laten. Heeft ook als voordeel dat bovenstaande edit niet van toepassing meer is.

[Bericht gewijzigd door rew op 17 november 2020 14:16:28 (13%)]

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
EricP

mét CE

Die serie doet ook TPI. Heb ik geen hapklare programmer voor.
Ik ken TPI niet goed genoeg om te weten of ze met iets 'high voltage' ook nog te erasen zijn. Als dat het geval is, dan kun je alleen geen in-circuit programming doen.

De code is niet zo heel spannend. Kan gewoon in C. Maar ja... wel ff iemand hebben die de spulletjes heeft om die dingen te programmeren. En een complier die dat chippie kent - al zijn het feitelijk alleen de definities van wat waar zit...

[Bericht gewijzigd door EricP op 17 november 2020 14:23:12 (12%)]

Tiny9 (en Tiny4, Tiny5, Tiny10) is een speciaal geval. Die kent geen ISP programming maar moet met TPI programming. De meeste programmers (zoals usbasp) weten niet hoe dat werkt.

Zelf heb ik daar ook geen ervaring mee.

fatbeard

Honourable Member

Hartverwarmend die reacties, dank.
Herstel, DANK ;)

Ik was zelf ook al 'even' aan het loeren naar oplossingen en kwam de MPLAB Snap tegen, dat zou een oplossing kunnen zijn als ik zo even snel door de docs scan.
Dan moet er alleen nog een (low cost) IDE of compiler bij. Wel weer een leercurve, maar daar ga ik dan hopelijk weer profijt van hebben met andere projecten.
Dat de tiny9 geen UPDI heeft is idd wel een tegenvaller, dat maakt de hele interfacing met een ISP wat lastiger. Maar daar is wel overheen te komen met een kleine mod in die Snap.

De reset wordt gegeven door het opkomen van de voeding (internal POR, het inschakelen van de voeding gebeurt extern) dus ik heb geen 'echte' reset nodig, als het echt moet kan ik die pin wel omprogrammeren.
[edit] Voor het ISP programmeren met een disabled reset is er een 12V protocolletje...
Na de ingestelde tijd wordt de voeding dan door een van de twee uitgangen (onmogelijk te zeggen welke) weer uitgeschakeld. Dat die tijd een paar seconden kan afwijken is niet echt relevant.

Ik zou het ook met wat CMOS poortjes kunnen doen (was mijn eerste idee) maar dat gaat meteen weer zoveel componentjes kosten; bovendien zijn kwartieren dan niet zo heel simpel over een breed temperatuurbereik (10-60°) min-of-meer precies te houden.
Okokok, een 4060 met wat spul eromheen zou als het echt niet anders kan ook kunnen.

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.

Waarom niet de attiny45 die is direct via usb te programeren.

Hoe bedoel je? Tiny45 gaat toch gewoon via ISP?

Ik zou het doen met een Tiny13 (want die heb ik liggen). :)

[Bericht gewijzigd door deKees op 17 november 2020 17:29:36 (40%)]

Ik heb tien van de attiny10 processortjes gekocht (niet merkbaar duurder dan de '9).

Ik denk dat ik dit ga nadoen (als ik tijd heb, dat kan wel effe duren). http://junkplusarduino.blogspot.com/p/attiny10-resources.html

Op zich wel bruikbaar die dingen. Ze zijn vergelijkbaar in prijs met bijvoorbeeld een "reset controller" chipje. Als de BOR (uitzoeken of die in deze dingen zit) een werkbaar spanningsniveau heeft, dan laat je bij een brownout de AVR resetten en dan tot zoveel miljoen tellen om een reset pulse af te geven. Gewoon programmeerbaar hoe lang, active low, active high etc....

Ik heb een project waar zo'n reset controller op zat en tussen de prototypes en de eerste serie was de reset controller die ik gekozen had ineens niet meer leverbaar. Dan maar een andere er op.

Update: BOR is in ieder geval niet via de fuses instelbaar.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Als je iemand kent die 12F683's kan programmeren en die ze in stock heeft zie je hier een andere aanpak.
Alles is in SMD te krijgen en je heb zelfs nog enkele poorten over moest je nog andere wensen hebben.

LDmicro user.
EricP

mét CE

Dat is natuurlijk ook een 8-pinner. Dan kun je net zo goed (of beter) een tiny13 ofzo pakken. Ruimte voor de pot was er geloof ik toch al niet - als een 8-poter al een probleem is.

Maar fatbeard... kijk eens op je een kleine 8-pinner kwijt kunt. Ik weet het... boardspace... Als je het echt netjes wilt doen (ik weet niet hoe kritisch je tijden zijn), dan ontkom je eigenlijk niet aan een xtal. Zo'n RC oscillator doet het. Is ook best nauwkeurig te krijgen, maar als het netjes moet, dan is het het vaak toch 'net niet'.

Als het overigens alleen om het programmeren gaat... Het eerste waar ik tegen aan liep toen ik op 'attiny9 programming' zocht, was een sketch voor een Arduino om de software in die tiny te blazen.
Nu nog ff een compiler die het ding kent (om de boel goed gemapped te krijgen)... Die software is echt appeltje-eitje.

fatbeard

Honourable Member

Allemaal leuke en goede suggesties, maar ze zijn zo GROOT...
De enige 8-pinner die ik kwijt zou kunnen zit is een SOT23-8 behuizing, maar dat wordt voorzover ik kon nagaan niet gemaakt.
De PIC10F reeks zit ook in een geschikte behuizing, dat is misschien nog een alternatief (heb ik héél vroeger wel eens wat mee gedaan).

Enneuh... een instelpotmetertje is voor deze toepassing veel te veel keuze: 1, 2, 3 of 4 kwartier is zat, en of dat nou 15 seconden meer of minder is is ook geheel onbelangrijk, die andere tijden mogen ook 20% afwijken.
Default 15 minuten en twee soldeerlinkjes (geen jumpers of DIPswitches: veel te groot) voor +15 en +30 minuten.

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.

Potentiometer vervangen door inputs is een makkie maar omdat je eerder schreef van een 4060 en wat componenten te gebruiken dacht ik dat een smd pot ook ging werken.

Ik zou een 10F202 kunnen gebruiken maar daar heb ik totaal geen ervaring mee.
Een smd 12F683 neemt ook niet veel plaats in.

Zal het programma voor de fun aanpassen zonder potmeter, je mag ermee doen wat je wilt ;)

LDmicro user.
fatbeard

Honourable Member

;)

Okokok, een 4060 met wat spul eromheen zou als het echt niet anders kan ook kunnen.

Voorlopig is het een printje van 35x35mm met als hoogste component een relais van 16mm, ik hoop dat ik dat kwijt kan:

met 17 SMDtjes aan de onderkant:

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.

Hier het programma en schema.

x1 & x2 zijn de 2 keuze inputs (met pull ups), 15, 30, 45, 60min

e:/ file naam gewijzigd ;)

LDmicro user.

Op 17 november 2020 17:37:42 schreef rew:
Ik heb tien van de attiny10 processortjes gekocht (niet merkbaar duurder dan de '9).

Ik denk dat ik dit ga nadoen (als ik tijd heb, dat kan wel effe duren). http://junkplusarduino.blogspot.com/p/attiny10-resources.html

Op zich wel bruikbaar die dingen. Ze zijn vergelijkbaar in prijs met bijvoorbeeld een "reset controller" chipje. Als de BOR (uitzoeken of die in deze dingen zit) een werkbaar spanningsniveau heeft, dan laat je bij een brownout de AVR resetten en dan tot zoveel miljoen tellen om een reset pulse af te geven. Gewoon programmeerbaar hoe lang, active low, active high etc....

Interessant project inderdaad, houd ons op de hoogte!

Update: BOR is in ieder geval niet via de fuses instelbaar.

BOR? Wat is dat? Brown-out reset? Als de opkomende voeding de interne threshold overschrijdt dan kan je toch maar beter niet resetten bij het weer dalen?

hennep

Golden Member

Weet je zeker dat je zo'n groot relais nodig hebt?

Ik wil je er hier wel een van toesturen:

Voor de afmeting ligt het ding ter referentie op een usb connector.

Dan hoef je je ook geen zorgen te maken over het plaatsen van zo'n "groot" 8pins ic.

Ik hoop maar dat je alles eerst goed test want een relais bovenop een controller plaatsen is om moeilijkheden vragen om nog niet te spreken over voldoende ontkoppeling van de voedingslijnen.

LDmicro user.

Op 17 november 2020 12:53:30 schreef fatbeard:
Ik heb een wat curieuze timer functie nodig: twee outputs die na een digitaal instelbare tijd (15-60 min) na elkaar een puls geven;

Je moet een puls geven, kan dat niet met een transistor? of een opto-coupler. Eventueel een opto-mosfet als de TLP222

EricP

mét CE

Vast wel. Krijg jij het zo klein?

Jochem

Golden Member

Op 18 november 2020 11:13:01 schreef MGP:
Ik hoop maar dat je alles eerst goed test want een relais bovenop een controller plaatsen is om moeilijkheden vragen om nog niet te spreken over voldoende ontkoppeling van de voedingslijnen.

Ik snap dat het met de Arduino-aanpak (lekker overal lange draden, onvoldoende ontkoppeling, etc) vaak mis gaat, maar als in een professioneel design een relais niet in de buurt (bovenop/onderop/naast) een controller mag, dan zouden er al een hoop projecten zijn misgelopen bij mij...

Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.
hennep

Golden Member

Een paar aannames: Ik zie "LAMP" en "N" staan. Ik zie een condensator met 2 weerstanden er over, een brugcel en een (zener?).
Dan verwacht ik dat TS een lamp met een puls wil aansturen, alles gevoed vanuit het lichtnet. Een belichtingsautomaat of zoiets?

Dat doe je niet met een transistor en mijn relais kan ook maar 125AC of 60DC als maximum verdragen.

Dan is een kleine triac met een MOC3020 een compacter opzet. Mooier nog een MOC3030, die schakelt in de nuldoorgang.

fatbeard

Honourable Member

@MGP: Het is niet mijn eerste rodeo :7
Ik bedenk me nu alleen wel dat de eerst bediende relaisspoel als enige wel eens een blusdiode nodig zou kunnen hebben...

@Hennep: Ik dacht in eerste instantie ook aan zo'n relaistje (heb ik liggen ivm een ander project), maar die zijn idd niet geschikt voor 230V...

De bedoeling van de schakeling is dat-ie zich gedraagt als een wisselschakelaar in een hotelschakeling, die zichzelf bedient na de ingestelde tijd om op die manier te voorkomen dat het licht in bijv. het toilet, de badkamer of kelder blijft branden.
Het bistabiele(!) relais dient dus een 'normale' lampbelasting te kunnen schakelen én een wisselcontact te hebben, daarmee is de boel transparant (zelfs als er een defect optreedt). Dat is met triac's niet of nauwelijks te doen...
De vertragingstijd is een nattevinger aanname van wat praktisch is: weinig mensen zullen langer dan een uur aaneengesloten in zo'n ruimte zijn, YMMV.

De hele schakeling krijgt alleen voeding als de lamp brandt, zet je de lamp zelf uit is de schakeling ook uitgeschakeld.
Als je vergeet om de lamp uit te zetten worden na de ingestelde tijd beide spoelen van het relais na elkaar bediend, de eerste die het relais laat omklappen schakelt de boel uit.
Daar komt de tijdlijn uit voort: het relais heeft minimaal 30ms impuls nodig, de 'voeding' een dikke seconde ter recuperatie. De tweede puls mag de voedingselko's leegtrekken, omdat dan al zeker is dat de boel is uitgeschakeld.

Het eigenverbruik van de schakeling is minder dan 2W, en hij staat alleen aan als de lamp ook brandt. Het zou nog wat zuiniger kunnen maar dan heb je weer een grotere elko nodig (relais heeft 65mA nodig), in deze opzet volstaat (volgens de simulaties in elk geval) 470u...

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.

Op 18 november 2020 13:01:15 schreef fatbeard:
@MGP: Het is niet mijn eerste rodeo :7 ....

Ook die vallen nog wel eens van de stier ;)

Dit gezegd zijnde heb ik bovenstaande hexfile vernieuwd, bij nazicht bleek dat ik een waarde niet had teruggezet na de simulatie, ik kon toch niet telkens 15min wachten ;)
Nu is alles ok.

LDmicro user.
hennep

Golden Member

Je kunt nog wel wat ruimte besparen door een klein relais te gebruiken. Omron heeft leuk spul. In deze datasheet staat dat het -Y type voor 250VAC is.

fatbeard

Honourable Member

Die Y-versie is er niet in bistabiel met twee spoelen; een enkele spoel heeft een volledige H-brug nodig waardoor je het voordeel weer grotendeels teniet zou doen.
Los daarvan: die Y-versie heeft alleen 'extra' isolatie, geen extra schakelvermogen.
Het schakelvermogen van al deze relais is 60W en dat is te weinig...

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.