G.I.P: automatisch schaduwstation zonder wissels

Gestart door conducteur, 09 mei 2012, 21:33:26 PM

conducteur

Ik geloof dat er nog twee I/O's op de C poort vrij zijn, ga daar eens twee ledjes aanhangen...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

conducteur

Ik denk dat ik bijna weer een EUREKA moment heb, maar voor de spanning in te houden wacht ik tot morgen.

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

conducteur

#287
Nog geen vooruitgang in het stappenmotor verhaal, wel een grote vooruitgang algemeen ivm programmeren. Toen ik dit project begonnen ben had ik zo'n e-blocks programmer geleend van school, en m'n printjes zijn dus niet voor zien met een header om een connector op aan te sluiten voor m'n pickit2 die ik deze zomer gekocht heb (programmer uiteraard moeten teruggeven).


Nu kan ik zonder problemen regeltje per regeltje de code schrijven en direct uitproberen. Ik hoef niet meer te vrezen voor geplooide µC pinnen, en ben verlost van het ganse gepruts door nu op een stukje gaatjesprint een connector te zetten en de 5 draden te verbinden naar de juiste pin op de µC.


Leve ICSP!


Nu dus van 0 terug begonnen, heel simpel en elke keer de code wat vooruitgegaan is (hoe eenvoudig die ook mag zijn) testen, veel vlugger dan vroeger. Ik ben nog ver van daar waar ik bijna was, maar het gaat vooruit en werpt z'n vruchten af, de nieuwe werkmethode! Samen met de tip van Michiel staan nu ook twee ledjes op de 2 vrije I/0 op de C poort. Daarmee staat het boeltje 'vol'.
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Sattrickske

ALs ik je nog een tip mag geven...  Lees heel goed e datasheet van de controller na.  Elke controller (ook bij Microchip) heeft z'n eigen speficiteiten en eigenaardigheidjes.  Zoals default uitgeschakeld pullups, sommige poorten die open collector zijn,  analoge ADC die by default actief zijn, ...
Heel dikwijls is niet werkende software te wijten aan incorrecte configuratie van de controller.  Ik ben hier zo ook al een paar keer tegen de lamp gelopen omdat ik dacht dat alle Microchips dezelfde of gelijkaardig zouden zijn; foute veronderstelling...

conducteur

#289
--> Ik zal me eens moeten storten op de werking van die instelregisters voor dingen te configureren in de chip... bv voor de interne pull-up van Port B

   #include <htc.h>
                                       // Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled
   __CONFIG(FOSC_HS & WDTE_OFF  & LVP_OFF);
   #define _XTAL_FREQ  20000000     
   
   
   
void main(){


ANSEL=0;
ANSELH=0;
unsigned char b;
while (1){
   
   TRISB=0xFF;   
   PORTB=b;
   __delay_ms(500);
   TRISD=0x00;
   PORTC=b;
   __delay_ms(500);
}     
     


     


   
}
     



PortB in een variabele stoppen en dan naar poort D sturen (de relais weet je) en die gaan allemaal aan. Er klopt dus iets niet aan poortB en zal daar dus nooit iets kunnen bedienen op die manier. (hoewel ik 0,000mV meet op de pinnen van poortB leest ie ze toch in als 1 dus intern probleem wellicht?
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Gerolf

Ik weet niet hoe het zit bij jouw Pics en je programmeeromgeving, maar bij Bascom en AVR's bestaan er drie registers per poort
ddrb: direction (richting) van de poort. 0=ingang, 1 is uitgang
portb: register om uitgang te schrijven, of voor de interne pull-up bij ddrb=0
pinb: register om de ingang te lezen
"a=portb" leest dus de "aktiviteit" van alle pull-ups. "a=pinb.2" leest de elektrische toestand van een ingangssignaal.

't Is een klassieker om pinb en portb met elkaar te verwarren  ;)
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

conducteur

Citaat van: Gerolf op 31 oktober 2013, 08:26:47 AM
Ik weet niet hoe het zit bij jouw Pics en je programmeeromgeving, maar bij Bascom en AVR's bestaan er drie registers per poort
ddrb: direction (richting) van de poort. 0=ingang, 1 is uitgang
portb: register om uitgang te schrijven, of voor de interne pull-up bij ddrb=0
pinb: register om de ingang te lezen
"a=portb" leest dus de "aktiviteit" van alle pull-ups. "a=pinb.2" leest de elektrische toestand van een ingangssignaal.

't Is een klassieker om pinb en portb met elkaar te verwarren  ;)
Voor zover ik geleerd heb zijn er 2 het TRIS commando zet de ingang/uitgang. 0 is output I is input. Bv TRISB=0xFF; --> alle pins van poort b zijn input. of TRISC=0x3E; --> bepaalde pins zijn input/output op de c poort... En het commando om de poort te lezen/schrijven is gewoon PORTB/PORTA/PORTC bv --> PORTB=255


wil je een pin schrijven moet je met die logische operatoren werken.
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Geert

Nog een mogelijke ergernis bij PIC's  is het 'read modify write' probleem. Eenvoudig uitgelegd kan ik dit als volgt omschrijven:

Als je een uitgangsbit een bepaalde logische waarde toekent, dan gaat dit via een register, technisch: een D F-F,  die de uitgangspin aanstuurt (zie figuur  data sheet PIC16F887, I/O ports C):

BSF PORTC,1      <-- zet bit 1 van poort C logisch '1'

Lees je nu de logische waarde van poort C bit 1, dan lees je niet de logische waarde van de D F-F maar de logische waarde direct op de uitgangspin.  En deze logische waarde is niet altijd de logische waarde van de D F-F, maar kan afhankelijk van wat er geschakeld is op de uitgang een andere logische waarde zijn. Kan bijvoorbeeld voorkomen bij capacitieve of inductieve belasting, maar ook bij stoorbronnen.

Als je nu de volgende instructie uitvoert in C code (alle pinnen op poort C zijn uitgangen):

PORTC |=0X01      //PORTC = PORTC OR 0X01

Wat doet de µC dan: deze leest de logische toestand op de pinnen van poort C, voert er een bewerking op uit, en zet deze in de D F-F's van poort C. Zonder dat het eigenlijk de bedoeling was kan je zo een bitwaarde van een D F-F wijzigen, met in het uiterste geval als je de instructie snel na elkaar uitvoert een alternerende uitgang. 

Daarom wordt er heel veel aangeraden met schaduw registers te werken.

Ik kijk bij een µC die ik nog niet goed ken altijd in de data sheet wat  er op deze pin allemaal  geschakeld zit. Je staat soms versteld wat er op die C pinnen allemaal op geschakeld staat.


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

conducteur

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

dani

pfff.... registers, meervoudige instructies, assembler toestanden.....     geef mij toch maar een meer geavanceerde programmeertaal.
Al snap ik best wel het nut van compacte programma's en voorspelbare cyclustijden .
De kruik is te water gegaan...
De kruik is niet meer.

conducteur

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

dani

een C/C++ gebaseerde taal   (maar dan op een ander platform dan PIC, namelijk  Ard........o )
De kruik is te water gegaan...
De kruik is niet meer.

conducteur

Ik werk toch ook in C dus wellicht is er toch niet zoveel verschil? Wat is dan het probleem :


Citeerpfff.... registers, meervoudige instructies, assembler toestanden.....     geef mij toch maar een meer geavanceerde programmeertaal.
Al snap ik best wel het nut van compacte programma's en voorspelbare cyclustijden .
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

dani

heb ik dan gezegd dat er een probleem is  ?
waar staat dat ?   waarschijnlijk waar veel mensen het vaakst lezen, tussen de regels.  Maar daar zou het niet moeten staan.

never mind.  ligt wslk aan mij
De kruik is te water gegaan...
De kruik is niet meer.

conducteur

Ik dacht dat zo te interpreteren, excuses als je je aangevallen voelt...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum