Hallo,
Ik probeer een onderlinge communicatie tussen 2 pics tussen stand te brengen namelijk de 12F675 en de 16F877A

Helaas krijg ik het niet fatsoenlijk werkend met serin en shin en al die ander protocollen(heel veel opgezocht en de code die ik vind wil maar niet werken) dus probeerde ik het DMV

Pulsin en pulsout en een busy lijn zie hieronder mijn code.

Zoals te zien draaien bijde pic's op 20 Mhz


ZENDER

DEVICE 12F675                 ;PIC12F675
CONFIG WDT_OFF, PWRTE_ON, MCLRE_OFF, HS_OSC
ALL_DIGITAL TRUE              ;Alles digitaal alleen aan of uit
PORTB_PULLUPS = ON

dim VARiabele as byte

symbol BUSY = gpio.1
symbol DAT  = gpio.2


clear
goto main

DATAzenden:
 high busy
 delayms 20
  low busy
 pulsout dat, variabele
return

Main:
While 1 = 1
  delayms 10
  gosub datazenden
  for variabele = 1 to 255
  delayms 50
  next                       
wend

Ontvanger

EVICE 16F877A                                ;We gebruiken een 16F628A type
CONFIG WDT_OFF, PWRTE_ON, LVP_OFF, HS_OSC
Xtal 20                                       ;20Mhz kristal
ALL_DIGITAL TRUE                              ;Alle ingangen digitaal
portb_pullups on                              ;Alle pullup weerstanden voor de B poorten +5V (aan)

Declare LCD_ENPIN PORTC.7                     ;LCD EN pin declareren
Declare LCD_RSPIN PORTC.6                     ;LCD RS pin declareren
Declare LCD_DTPIN PORTD.4                     ;LCD DT pinnen D4/D5/D6/D7 declareren
Declare SCL_PIN PORTc.5                       ;Serial Clock Pin declareren
Declare SDA_PIN PORTc.4                       ;Serial Data  Pin declareren

symbol BUSY = porta.3
symbol DAT  = porta.5
dim DATAbyte as byte

delayms 200
                                                                     
Clear
cls

goto main

DATAontvangen:
while busy = 1 : wend
databyte = pulsin dat, 1
return

Main:
while 1 = 1

if busy = 1 then
gosub dataontvangen
endif
if databyte > 30 then
    high portb.5
    delayms 300
   else
    low portb.5
endif
print at 1, 1, @databyte, "   "

wend

Ik wil graag weten wat en hoe doe ik het fout en waarom?
Ik kom er niet uit.

bij de zender is geen xtal ingevuld??

jan

idd jan ik zie het.

Nieuwe poging volgens commando's uit picbasic:

Ik krijg als ik voor variabele bijv 12 tik perfect 12 eruit.
Echter zodra ik de regel zoals hier onder (for variabele = 1 to 255) dan krijg ik niks meer door naast een paar random getallen :'(


zender

DEVICE 12F675                 ;PIC12F675
CONFIG WDT_OFF, PWRTE_ON, MCLRE_OFF, HS_OSC
ALL_DIGITAL TRUE              ;Alles digitaal alleen aan of uit
PORTB_PULLUPS = ON
xtal 20

dim VARiabele as byte

symbol DAT  = gpio.2

clear

while 1 = 1                   
  SEROUT dat, 3313, ["WW", Variabele]
    for variabele = 1 to 255   
wend


ontvanger

DEVICE 16F877A                                ;We gebruiken een 16F628A type
CONFIG WDT_OFF, PWRTE_ON, LVP_OFF, HS_OSC
Xtal 20                                       ;20Mhz kristal
ALL_DIGITAL TRUE                              ;Alle ingangen digitaal
portb_pullups on                              ;Alle pullup weerstanden voor de B poorten +5V (aan)

Declare LCD_ENPIN PORTC.7                     ;LCD EN pin declareren
Declare LCD_RSPIN PORTC.6                     ;LCD RS pin declareren
Declare LCD_DTPIN PORTD.4                     ;LCD DT pinnen D4/D5/D6/D7 declareren
Declare SCL_PIN PORTc.5                       ;Serial Clock Pin declareren
Declare SDA_PIN PORTc.4                       ;Serial Data  Pin declareren

symbol DAT  = porta.5
dim DATAbyte as byte

delayms 200
                                                                     
Clear
cls

Main:
while 1 = 1
SERIN dat, 3313, [WAIT("WW"), databyte]    
print at 1, 1, dec databyte, "   "
wend

dit daarintegen voor zender werkt perfect

while 1 = 1
SEROUT dat, 3313, ["WW", Variabele]
if gpio.1 = 1 then
variabele = 212
elseif gpio = 0 then
variabele = 38
endif
wend

alleen veel storing bij draden langer dan 10 cm.

Dus, behalve de storing bij > 10cm, werkt het nu?

ja ik ga nu proberen de waarde van een ADC te versturen naar de 2e pic

er ook aan denken dat het lijntje naar de ander pic een pull up weerstand moet hebben.
jan