i2c (/smbus) counter

Heeft met elektronica te maken maar het is geen elektronica

Postby anneo » Wed Jun 27, 2012 12:00 am

Om zomaar de I2C besturing van de ene AVR naar de ander te kunnen omzetten zie ik niet zitten.
Een tiny13 heeft niets voorzien,moet je zelf met de poorten heen en weer schakelen en de start ontdekken en buiten(binnen)schuiven.
Met een tiny25 is het al eenvoudiger,heeft de mogelijkheid SCK en SDA met open drain te hebben ,heeft een startdetectie aan boord en een schuifregister+buffer.
Dan heb je de mega8 met een I2C controller die opdrachten als zend start,ack,eindcode en foutmeldingen enz.in hardware regelt.
Anne
anneo
 
Posts: 1339
Joined: Thu Jan 02, 2014 10:36 am

Postby eriksl » Wed Jun 27, 2012 12:00 am

Dat is precies wat ik ook al probeer aan te geven. Stap één is een paar gpio pinnen, alle microcontrollers hebben dat wel. Die moet je dan met heel exacte timings als sda en scl gaan aansturen vanuit software. Lijkt me een hels karwei, het moet ook nog eens niet alleen "gewoon werken" maar ook nog eens aan alle eisen van Philips/Intel voldoen, anders werkt er geheid iets niet.

Als je al een stel scl/sda lijnen hebt, dan hoef je je waarschijnlijk iets minder druk te maken over de timings, misschien is er zelfs een i2c master deels in hardware geimplementeerd. Maar als slave heb je daar natuurlijk niks aan. Een i2c master is veel makkelijker te maken dan een slave...

Vandaar dat ik niet meteen heel enthousiast was over implementatie op een uC. Staat tegenover dat waarschijnlijk vast wel iemand eerder een i2c slave in software heeft gemaakt, zie artikel dat hiervoor is aangehaald.
eriksl
 
Posts: 515
Joined: Thu Jan 02, 2014 3:28 pm

Postby anneo » Thu Jul 19, 2012 12:00 am

Een eindje terug hier zitten kakelen dat 't wel met een µC te doen was.Nu woon ik in de buurt van Bussel waar de inboorlingen ook wel kiekefretters genoemd worden.Da's link hier,kakelen zonder eieren leggen,dan ga je de soep in.Dus dan maar leggen geblazen.Je kunt "s zien of dit zo werkt.Heb er flink op gepuzzeld.Een .txt om even te kijken met notepad en ingepakt (zit geen strikje om) voor wie echt aan de slag wil.
Anne
Attachments
ATtiny25-I2C.txt
(8.1 KiB) Downloaded 29 times
I2CASM.rar
(60.1 KiB) Downloaded 30 times
anneo
 
Posts: 1339
Joined: Thu Jan 02, 2014 10:36 am

Postby eriksl » Sun Jul 22, 2012 12:00 am

Ik heb de afgelopen maand vakantie gebruikt om nou eens boter bij de vis te doen, ik heb een avr dragon gekocht, een stel attiny85's, 84's en 861's, programmeersoftware (avr-gcc en avrdude) geinstalleerd en vooral veel gelezen.

Dat heeft z'n vruchten afgeworpen en ik heb sinds gisteren e.e.a. werkend, ik heb een experimenteerbordje gemaakt met een 861, vier leds en twee push buttons en het werkt!

Wat ik al eerder zei, het programmeren (software) is absoluut niet het probleem, ik programmeer 25 jaar in C, vroeger ook wel in assembly (Z80 en 68000). Jouw oplossing kan ik prima lezen, maar ik zie niet zo waarom je geen C zou kunnen gebruiken.

Zelfs de timers en de interrupts begin ik al aardig onder de knie te krijgen.

Nu de volgende uitdaging, functionele bouwstenen maken, zoals ik die van plan was:
- meerdere pin-tellers
- meerdere pwm-uitgangen (met effecten, dus niet 1:1 met de pwm hardware te maken)
en dan aangestuurd met i2c.

Maar dat gaat wel lukken, het gaat allemaal heel voortvarend totnutoe
eriksl
 
Posts: 515
Joined: Thu Jan 02, 2014 3:28 pm

Postby anneo » Sun Jul 22, 2012 12:00 am

Iedereen wil maar aan "C",welke
Vroeger veel in de weer geweest met de Z80 ,potlood en papier.
Blijf er liever met mn neus bovenop,weet ik precies wat doet (als het datablad klopt),hou ook niet van dat "include",zit een deel weer elders,wat doet het ook al weer?Je moet ook vooral het eind van het datablad bekijken,daar staat wat ie (soms) niet doet.
PWM effecten,lijkt me vooral het manipuleren van inhoud van de OCRx registers.
Meerdere pinnen tellen,als 't niet te snel moet PCINT toestand poort bijhouden en bij int.zien welke is(zijn) verandert.
Voor de i2c dacht ik eerst ook laat de data door het hoofdprog verzorgen,maar het is zo weinig extra dat het best binnen de int-routine kan.Als module met een databuffer gaat het best als er data binnenkomt.Moet er data verstuurd dan moet er vermoedelijk gewacht worden tot het hoofdprog zo vriedelijk is (of tijd heeft),vertraagt de bus waarschijnlijk nogal(wordt SLC op nul gehiuden).We horen er nog wel van hoop ik.
Anne'
anneo
 
Posts: 1339
Joined: Thu Jan 02, 2014 10:36 am

Postby eriksl » Sun Jul 22, 2012 12:00 am

Je hebt C en C natuurlijk. De meeste C-programmeurs (en met name C++) hebben nou eenmaal niet zoveel ervaring en kennis van het correct gebruik van de taal. Vooral C++ wil nog wel eens "bloatware" worden, waarbij heel veel code gebruikt wordt om heel weinig te effectueren, waarbij het programma dan ook nog eens onleesbaar is. Dus in die zin geef ik je wel gelijk. Maar dat ligt niet aan de taal C zelf. Het mooie aan C is dat je vrij eenvoudig kunt voorspellen wat voor assembler code er uit gaat komen, je zit echt vlak boven de assembler en dat vind ik juist precies goed. C haalt net een beetje de scherpe kantjes vanaf (zoals omgaan met waardes > 8 bits, vermenigvuldigen en delen waar meestal geen machine codes voor zijn enz.)

Ik heb "vroeger" heel veel Z80 en 68000 assembly geprogrammeerd (programma's van meerdere duizenden regels...), dus ik kan wel vergelijken

Het programmeren van uCs in Basic e.d. vind ik volstrekt belachelijk, dat is weer een ander verhaal.'
eriksl
 
Posts: 515
Joined: Thu Jan 02, 2014 3:28 pm

Postby anneo » Sun Jul 22, 2012 12:00 am

Het zal best handig zijn,ik begin er niet meer aan.Loopt toch uit dat ik elke keer weer moet terugzoeken hoe het hier nou weer moet.Blijft niet zo ngoed meer hangen.
'tJa grotere getallen en verm./delen in C ,dacht dat je dan gelijk een heel pak rekencode op je boterham kreeg.Dacht dat het in een tiny24 kon,neem maar een 84 .
Of zoals i2c code,AVR in zn app-note kondigt ruim 350bytes aan(ong)en het hele spul wat ik in alkaar gehangen heb 256 bytes.En daar zit de teller en de PWM bij !Geen aansporing om met zoiets te beginnen.
Tegenwoordig telt wat meer geheugen niet meer zo,maar als je begonnen bent met 1k geheugen te vullen met schakelaars,kijk je daar wat anders tegenaan .
Anne
anneo
 
Posts: 1339
Joined: Thu Jan 02, 2014 10:36 am

Postby eriksl » Sun Jul 22, 2012 12:00 am

Mijn eerste computer was een zx81 met 1 kilobyte geheugen. Daar was 750 bytes voor het schermgeheugen. Ook daarin kon je (beperkt) een basic programma kwijt, met de nodige berekeningen. Dus ik ben wel wat gewend

En ja, ik heb attinys84's '85's en 861's gekocht, met het grootste geheugen. Waarom? Omdat het maar een paar cent scheelt. Het is niet de moeite waard om daarop te bezuinigen. En voordat je die 8k vol hebt, moet je aardig wat library-functies meeslepen. Ik zit nu op programma's van rond de 350 bytes, waarvan iets van 300 bytes vaste opstartcode is. Een C compiler genereert op zich heel kleine code, het zijn de libraries die het eindresultaat laten exploderen. En dat heb je grotendeels zelf in de hand.'
eriksl
 
Posts: 515
Joined: Thu Jan 02, 2014 3:28 pm

Previous

Return to Allerlei

Who is online

Users browsing this forum: No registered users and 1 guest