SPI probleem

Alleen berichten met de trefwoorden “breadboard” worden getoond. Alle berichten tonen

Hallo,

Om een oscilloscoop op USB te maken, heb ik een schakeling met 1 master PIC die communiceert via SPI met een slave pic, grafisch LCD scherm en extern sRAM geheugen.

Wanneer ik de schakeling op breadboard gemaakt heb, werkte deze perfect. Nu ben ik de componenten geleidelijk aan het solderen op een gaatjesprint (en via draden verbonden met de rest van de schakeling op het breadboard.

Wanneer ik in een tweede stap de slave PIC op de gaatjesprint gesoldeerd heb, werkte de SPI communicatie niet meer. Ik had (toevallig) gevonden dat het terug werkte wanneer ik een 330 ohm weerstand in serie zet tussen de CS uitgang van de master PIC en de SS ingang van de slave PIC. Goed, dat werkt dus terug.

Als ik nu in een derde stap het sRAM geheug naar de gaatjesprint verplaatst heb, werkt enkel het sRAM niet meer. Er is niets verkeerd met de connecties en contacten, ik heb ze allen doorgemeten. En als ik dit IC terug op het breadboard aansluit, werkt het terug.

Wat doe ik verkeerd?
Ik verbind gewoon de SCK van de master rechtstreeks (zonder weerstanden, condensators, ...) met de SCK van de verschillende slaves. SDO van master naar SDI's van slaves. SDI van master naar SDO's van slaves. En de CS (dacht ik) dat die ook gewoon rechtstreeks verbonden mochten worden van de verschillende CS's van de master naar de slaves.

Dank bij voorbaat

Ik heb nu ieder IC voorzien van een 100 nF condensator bij elke voedingsaansluiting vlak bij het IC zelf.

De vooruitgang die hierdoor geboekt is, is dat als ik de sRAM IC aansluit op de master PIC in serie met de draden die ik gebruikte op het breadboard en met 330 ohm weerstand in serie met CS, de schakeling werkt. Maar wanneer ik de draden die ik op het breadboard gebruikt heb ertussen uit doe, en de sRAM rechtstreeks op de master IC aansluit, werkt het niet meer...

Wat doe ik nog verkeerd?

Ik heb alle connecties nog eens nagemeten en ze zijn echt wel in orde. Wanneer ik de sRAM IC terug op het breadboard zet, werkt het terug, schakel ik hem terug via de gaatjesprint werkt het niet.

De low spanningen zijn 0 V, de high spanningen 4,84V = Vcc

Hier is wel iets geks aan de hand. MEt lange draden op een breadboard en veel extra capaciteit (breadboard) werkt het wel en met korte draden niet.
Ik denk dat er een probleem is op je gaatjes print en dat je daar een storend signaal hebt gecreëerd wat er op het breadboard niet is.
Een aantal goed foto's zal inderdaad helpen. Maar een scope of logicanalyzer zal je nog meer helpen:).

Hier zijn de foto's:
-Stap 1: https://www.dropbox.com/s/09xjcgct62oiiv5/Stap%201.mp4?dl=0
werkt perfect, alles op breadboard
-Stap 2: hierbij valt er zeker commentaar te geven op de lange kabel en connector naar het scherm, maar wanneer ik het scherm en stekker weglaat, werkt het ook niet. Het heeft tijdelijk gewerkt wanneer ik pull-up weerstanden naar CS plaatste en pull-down weerstanden op SCK, SDO en SDI
-Stap 3: extern sRAM werkt niet meer. Ik weet dat de kabellengte alleen langer geworden is, maar wou nog niet direct alles vastsolderen aangezien het misschien niet zal werken.

Ik begin er eigenlijk een beetje genoeg van te krijgen... Master pic, slave pic voor usb en schermpje werken gelukkig wel. Ik denk dat ik het externe sRAM gewoon achterwege ga laten ;-)
Ik ga alles vastsolderen en de kabels inkorten en dan zien we wel of sRAM werkt of niet, werkt het niet dan laat ik het weg ;-)
PS: iemand suggesties voor een eenvoudig aan te sturen sRAM geheugen met een andere dan SPI interface (dat ik ook gelijktijdig met de SPI voor de andere zaken kan gebruiken)?

Ja, zelfde modus en snelheid. (Werkte perfect op breadboard.)

1. Ja, daarvan was ik vertrokken. De pull ups en downs had ik uit miserie en wanhoop toegevoegd ;-) Nu staat een 330 ohm weerstand in serie met de CS van de slave pic (anders werkt die niet).
3. Dit gaat mijn scoop worden, dus kan het niet :-p
5. Is het geval.
6. Heb ik nu wel gedaan, ben er iets teveel dagen mee bezig geweest :-p Ik kan 250 metingen opslaan op het interne RAM geheugen van de PIC, en daarbij is de tussentijd tussen 2 metingen minimaal 65 µs.

Ja, zelfde modus en snelheid. (Werkte perfect op breadboard.)

Op het breadboard bleven de signalen goed. Op het gaatjes board is er iets in de signalen verander waardoor ze niet meer goed zijn. Dat kan de route zijn via het gaatjes print, overspraak en tal van andere zaken. Straal je kristal niet naar je signaal lijnen?

3. Dit gaat mijn scoop worden, dus kan het niet :-p

Op ebay koop je al voor weinig een logicanalyser, echter zie je daar alleen of het signaal van niveau verandert niet de vervorming op het signaal.

fatbeard

Honourable Member

Ik heb iets soortgelijks meegemaakt (geen breadboard, geen gaatjesprint maar een professionele multilayer).
Betrof de communicatie tussen twee identieke PICs (4MHz bus 'snelheid'): een slave-processor aan een bestaand -goed werkend- apparaat.
Het gekke was dat het alleen werkte met de scoop (HP54645D) aan de CLK en MISO/MOSI lijn...

Heel lang zitten zoeken met twee collega's in zowel hardware als software, datasheets tot op de laatste komma uitgeplozen, nooit wat gevonden. En ja, beide PICs hadden dezelfde bussnelheid en -mode, en dezelfde kristalfrequentie (wel beiden met hun eigen kristal).
Uiteindelijk (product deadline) maar 22pF van zowel CLK, MISO als MOSI naar GND geplaatst: nooit meer problemen gehad met dat ding...

Voor bussen tot een MHZ of 5 (was toen het maximaal haalbare) is dit een werkbare kludge, bij hogere snelheden is het toch een kwestie van spitten.

Ik ben het met Arco en Antoine eens: de meest waarschijnlijke oorzaak is een verkeerde modus. Dan kan in een breadboard-setting (vanwege de grote parasitaire capaciteiten daar) nog nèt werken, als je dan de parasitaire capaciteit verkleint (gaatjesprint) zit je precies aan de verkeerde kant van de marge.

Helaas is dat soort dingen alleen met een -goede- scoop vast te stellen (maar soms ook helemaal niet, zoals in mijn geval), misschien is er iemand die je daarmee kan helpen.

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.