Nieuws:

Nu in MSM 272 TEST: Märklin reeks 17 | L.S.Models 2707 Certus | Piko NS 7501 | P.I.R.A.T.A. NS-nachttrein

Hoofdmenu

Micro-PlC

Gestart door conducteur, 04 augustus 2014, 01:37:41 AM

Sattrickske

Ik ken je programmeertaal niet zo goed, maar kan je de bitdetect procedure niet vervangen door een functie (eentje die een waarde teruggeeft)?  De functie is iets nauwkeuriger omdat je meteen de juiste waarde (0/1) terugstuurt.

Wat loopt er precies verkeerd?  Ik zie aan je code dat je probeert om de DCC preamble (min. 10 1-bitjes) te detecteren.  Hoeveel detecteer je er precies?

conducteur

teller=0
  led=on
  while (teller<10) loop  ;zolang géén 10 opeenvolgende "1"tjes "gezien" dit lusje doorlopen


   bitdetect
   if dccbit then
   teller=teller + 1        ;teller houdt aantal opeenvolgende "1"tjes bij
   else
   teller=0                    ; een 0 ontvangen reset de teller
   end if


  end loop
  led=off



Voor dit lusje gaat het ledje aan (led=on), maar gaat nooit uit net na de while, wat wijst dat de controller voortdurend in dat lusje blijft ronddraaien, en allicht dus niet in slaagt de "1"tjes te detecteren...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Sattrickske

Hola ik zie het al...
Zet een breakpoint bij teller=0 en kijk effe wat de waarde van teller is voordat je 'm op 0 zet.   Ik denk niet hoger dan één.  Die dccbit test mag niet je doen in je while loop, want die IS 0 op dat ogenblik.  Een '1' is een korte puls in DCC; dus je code faalt daar.  Op het ogenblik dat jij in de while loop dccbit uitleest tijdens een preamble, is die ALTIJD 0 (80µs na de flank, remember?).
Zoals ik gisteren al zei, verander je procedure in een functie en zorg dat de waarde van detectie terugstuurt (0 of 1), en zeker niet opnieuw proberen te lezen zoals je nu doet.

conducteur

  _usec_delay(80)     ; wacht (58µs (1) <80µs <100µs (0)
      if dcc then        ;is puls "0" of "1"
          dccbit=false   ;ontvangen bit is 0
      else
          dccbit=true   ; ontvangen bit is 1
       end if



dccbit wordt toch telkens geset/gereset met 1/0, Waarom mag ik dan niet nagaan in de while of die variabele bit 0/1 is?
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Sattrickske

oeps mijn fout, dacht dat dccbit de verbinding met de dcc-lijn was.  Klopt inderdaad wat je zegt...

Sattrickske

Op dit ogenblik kan ik niet veel meer zeggen.  Probeer te debuggen door breakpoints op een paar cruciale plaatsen te zetten en zo na te gaan waar het precies misloopt.

MickeyMouse

En zeker dat het signaal toekomt op 'dcc'?
Deze staat als input?
Geen pull-up nodig?

Probeer eens in een loop de waarde van dcc te kopieren naar een andere pin (output) en meet daar eens met een scoop.

conducteur

#157
Citaat van: MickeyMouse op 11 september 2014, 20:28:40 PM
En zeker dat het signaal toekomt op 'dcc'?
Deze staat als input?
Geen pull-up nodig?

Probeer eens in een loop de waarde van dcc te kopieren naar een andere pin (output) en meet daar eens met een scoop.


Het DCC signaal komt uit de roco multimaus, met 100K weerstandje in serie om die ingang te beveiligen.
Ja, kan ik eens proberen, als ik dan een signaal zie dan is dat een goed teken... Maandag meenemen naar de treinclub, waar de scoop nu ligt...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

MickeyMouse

Hoe is 'dcc' trouwens gedefinieerd in de software?

conducteur

alias dcc is pin_d7
pin_d7_direction = input

gewoon als ingang
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Geert

R van 100k rechstreeks op een PIC ingang. Niks anders er tussen, zet er is een luidspreker op, je hoort DCC!

Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

conducteur

Citaat van: Geert op 11 september 2014, 20:41:06 PM
R van 100k rechstreeks op een PIC ingang. Niks anders er tussen, zet er is een luidspreker op, je hoort DCC!

Geert
Inderdaad!
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Sattrickske

Verlaag de weerstand eens naar 10K.  Ik heb al meegemaakt dat op sommige PICs het DCC signaal te zwaar vervormd was met 100K.
En heb je al gedebugged? Kijk na met de debugger of je DCC bitdetect routine wel degelijk 0 én 1 terugstuurt.

Geert

Citaat van: Sattrickske op 11 september 2014, 23:06:42 PM
Verlaag de weerstand eens naar 10K.  Ik heb al meegemaakt dat op sommige PICs het DCC signaal te zwaar vervormd was met 100K.
En heb je al gedebugged? Kijk na met de debugger of je DCC bitdetect routine wel degelijk 0 én 1 terugstuurt.

Ik dacht dat Rian nu testen uitvoerde met een 16F887, ik detecteer daarop DCC met een R van 200k, weliswaar in ASM, maar dat maakt niets uit...


Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

conducteur

Citaat van: Geert op 11 september 2014, 23:13:51 PM
Citaat van: Sattrickske op 11 september 2014, 23:06:42 PM
Verlaag de weerstand eens naar 10K.  Ik heb al meegemaakt dat op sommige PICs het DCC signaal te zwaar vervormd was met 100K.
En heb je al gedebugged? Kijk na met de debugger of je DCC bitdetect routine wel degelijk 0 én 1 terugstuurt.

Ik dacht dat Rian nu testen uitvoerde met een 16F887, ik detecteer daarop DCC met een R van 200k, weliswaar in ASM, maar dat maakt niets uit...


Geert
Inderdaad 16f887
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum