Hallo Ik heb het volgende probleem:

Ik heb 5x een PIC18F2550 waarin elke pic 3 variabelen heeft
(elk een andere naam). Nu wil ik al deze 15 variabelen naar 1 PIC18F2550 versturen om vervolgens al deze waardes via RS232 naar een PC te versturen om deze daar vervolgens weer te scheiden.

Nu mijn vraag:

Hoe pak ik dit aan.

Alle andere functies die ik nodig heb uit de pic's heb ik al aan het draaien. Echter met communicatie via een pic heb ik geen ervaring.

Alvast bedankt

lijkt mij ideaal om daar een I2C busje tussen te hangen mits ze allemaal op dezelfde pcb zitten.

lean & mean.

maare waarom dan 5 uC's? lijkt mij een nogal dure oplossing zo op het 1e gezicht....

Bedankt voor de tip,

ga me daar dan eens in verdiepen,

ik zal je even uitleggen waarom ik 5 uC's gebruik.

Ik heb een systeem dat is opgebouwd uit 5 PCB's welke elke 3 kanalen moet uitlezen.(hierdoor kom ik aan 5x een uC's) deze zitten via een backplane aangesloten op een communicatie PCB welke via RS232 of misschien USB de communicatie naar de PC gaat verzorgen. (heb geen ervaring met USB maar moet met deze pic niet te complex zijn is mij verteld).

HIGH met HENK BEDANKT VOOR JE TIP!!

Op 10 september 2008 16:14:01 schreef Brooks86:
Bedankt voor de tip,

ga me daar dan eens in verdiepen,

ik zal je even uitleggen waarom ik 5 uC's gebruik.

Ik heb een systeem dat is opgebouwd uit 5 PCB's welke elke 3 kanalen moet uitlezen.(hierdoor kom ik aan 5x een uC's) deze zitten via een backplane aangesloten op een communicatie PCB welke via RS232 of misschien USB de communicatie naar de PC gaat verzorgen. (heb geen ervaring met USB maar moet met deze pic niet te complex zijn is mij verteld).

HIGH met HENK BEDANKT VOOR JE TIP!!

Zoals High met Henk ook al aangeeft werkt volgens mij I2C alleen als de pic's op dezelfde print zouden zitten.
Miss met rs485 oid?

nou I2C werkt prima voor deze toepassing. Alelen je moet elke PCB zijn eigen adress geven (jumpertjes erop?)
nadeel van I2C is de afstand

RS485 kan dat ook, maar kan over langere afstand, maar heeft VEEL meer hardware nodig: I2c is 2 weerstandjes en op vrijwel elke uC aanwezig.

Over hoeveel meter gaat het?
Als het meer is zou ik gewoon een maxim ic gebruiken, bijc het type dat henk geeft, heb ik pas geprobeerd werkt super!

Je kan dan een loopje in de pic zetten dat hij elke zoveel sec. zijn variabelen door stuurt en de master pic ze meteen doorstuurt als hij alle gegevens heeft ontvangen...

Iedereen bedankt voor zijn reactie,

Het gaat hier om een totale bus lengte van nog geen 90cm..
ik weet niet wat de eisen zijn voor i2C.

Lithium, ik weet niet percies wat jij bedoelt met het doorsturen van variabelen?? graag uitleg want miss is dat makkelijker omdat je voor I2C aardig wat registeres moet instellen in je PIC.

BEDANKT ALLEMAAL

90Cm, heb ik nooit geprobeerd...
Ligt er ook aan in welke omstandigheden het zich bevindt.

Je wilt toch gegevens over sturen dit zijn altijd andere gegevens?
Bijv een temp. nu is hij 12 graden morgen mss 13..
Dat zijn variabelen die je over zendt...

Ik heb laatst een voorbeeld gemaakt die werkte alleen weet ik niet of je er variabelen mee kan versturen.

Een simpele code:
Dit is de ontvanger.


DEVICE 16F628A                ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE              ;Alle ingangen digitaal


PORTB_PULLUPS ON              ;On-chip pull-up weerstanden actief
CLEAR                         ;Wis alle RAM geheugen
DIM tekst AS DWORD

;Logische constanten
SYMBOL AAN     = 0            ;Geinverteerd ON
SYMBOL HOOG    = 1            ;Signaal met hoog niveau
SYMBOL LAAG    = 0            ;Signaal met laag niveau           
SYMBOL TRUE    = 1            ;Waar
SYMBOL FALSE   = 0            ;Niet waar 
SYMBOL OFF     = 0            ;
SYMBOL ON      = 1            ;
SYMBOL UIT     = 1            ;Geinverteerd OFF

SYMBOL baud    = 4800         ;baud snelheid communicatie
SYMBOL timeout = 20           ;Timeout tussen communicatie

SYMBOL LED          = PORTA.0 ;Hierop een LED met serieweerstand aansluiten
SYMBOL ingang       = PORTB.1 ;Ingang voor seriele communicatie RX
SYMBOL uitgang      = PORTB.2 ;Uitgang voor seriele communicatie TX

SYMBOL antidender   = 25
DIM DATAbyte AS BYTE

DELAYMS 200
                                                                     
CLEAR                         ;Wis alle ram geheugen

LED = HOOG
DELAYMS 500
LED = LAAG


Main:
WHILE 1 = 1
SERIN ingang, 2400, [WAIT("WW"), DATAbyte]
IF DATAbyte = 26 THEN
TOGGLE LED
ENDIF

    
WEND

Dit is de zender:


DEVICE 16F628A                ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE              ;Alle ingangen digitaal


PORTB_PULLUPS ON              ;On-chip pull-up weerstanden actief
CLEAR                         ;Wis alle RAM geheugen

;Logische constanten
SYMBOL AAN     = 0            ;Geinverteerd ON
SYMBOL HOOG    = 1            ;Signaal met hoog niveau
SYMBOL LAAG    = 0            ;Signaal met laag niveau           
SYMBOL TRUE    = 1            ;Waar
SYMBOL FALSE   = 0            ;Niet waar 
SYMBOL OFF     = 0            ;
SYMBOL ON      = 1            ;
SYMBOL UIT     = 1            ;Geinverteerd OFF

SYMBOL baud    = 2400         ;baud snelheid communicatie
SYMBOL timeout = 20           ;Timeout tussen communicatie

SYMBOL ingang       = PORTB.1 ;Ingang voor seriele communicatie RX
SYMBOL uitgang      = PORTB.2 ;Uitgang voor seriele communicatie TX

SYMBOL antidender   = 25




SYMBOL VARiabele = 26


GOTO HoofdProgramma           ;Spring over de subroutine(s)


HoofdProgramma:
WHILE 1 = 1
  SEROUT uitgang, 2400, [26]
    
  DELAYMS 1000
  
  SEROUT uitgang, 2400, [26]
  DELAYMS 1000
            
WEND

END

Wat je hier doet is het volgende.
Hij zend elke seconden het getal 26 dit is een vast getal.

Als de ontvanger dat getal krijgt togglet hij een led.

Nu zie je misschien de woorden WW staan, dit is een wachtwoord dat je mee kan geven zodat je meerdere pic's aan elkaar kan koppelen en door een goed wachtwoord in te vullen dat het naar de goede pic gaat.

Lithium,

klein vraagje over je programma
waarom geeft de zender geen wachtwoord mee??,
of zeg je nu in de ontvanger dat deze niet van toepassing is...

En zo als je t hier hebt uitgelegd lijkt t niet zo ingewikkeld als ik dacht.

iig bedankt

Ja klopt, dit was nog wat ik had staan op me pc.
Zou het wachtwoord gedeelte gewoon weghalen...

Zorg er wel voor dat bijde PIC's op een externe kristal draaien, de interne is te onnouwkeurig.

Deze heb ik op intern gedraaid werkt goed om te experimenteren.
Wil je het gaan maken dan zou k een externe kristal gebruiken.

Bedankt Lithium,

Rene ik laat elke PIC op een appart crystal draaien van 20MHz. Want weet uit ervaring met CAN bus dat de interne oscilator niet voldoet voor communicatie doeleinden.

NOG MAALS IEDEREEN BEDANKT.

andere ideeen zijn ook welkom;)

je hebt ervaring met CAN
Can is RS485 feitelijk met een extra protocol...

maar zoals je dan ook weet: je hebt extra transcievers nodig.
Die kun je met I2C besparen, maar I2C over 90 cm: das wel een beetje de max, maar als het langzaam gaat zal het wel los lopen...

je mag volgens wiki maar 400 pF hebben op je totale bus, dus niet te lange lijnen feitelijk.

succes

Idd, ik heb enige ervaring met CAN en weet ook dat ik dan extra transcievers nodig, of een andere PIC. want daar ben ik nog vrij in. en bus lengte is verkeerd berekend de bus lengte is max 60cm.

bedankt

dat moet wel redelijk lukken (afhankelijk van de snelheid dan natuurlijk)

maar heeft PIC dan ingebouwde transceivers voor CAN? een CAN uart meestal wel, maar een transceiver lijkt mij sterk...
iig bij ATMEL zit die er niet in.

I2C zit waarsc p bijna elke PIC en met 2 weerstandjes op je backpanel ben je er dan al. kun je net als CANgewoon nodes aanprikken als ze maar allemaal een eigen adress hebben

't lijkt ook wel wat op CAN, qua hardware alleen spannings niveau's niet.

ECHTER op data verkeer is het anders:

I2c is packet georienteerd t.o.v. Can wat bericht georienteerd is.

geen echt multi master netwerk, maar master to slave (je kunt wel met meerdere masters, maar dan moet je ff beetje slim doen....) Als gevolg hiervan moet je ook acknowledges sturen dat je iets ontvangen hebt!

Er is wel zoiets als een broadcast meen ik me te herinneren, maar dat moet je ff checken, dit is voor mij ook alweer 4 of 5 jaar geleden...

Bedankt voor je support,

ik zag dat er al een forum was geopend over I2C, dus ik ga dat ff raadplegen mocht iemand nog een ander idee hebben.

Ik sta over voor open.

BEDANKT