Vai al contenuto
PLC Forum


Rabbit (Progetto on-line)


Gabriele Riva

Messaggi consigliati


  • Risposte 400
  • Created
  • Ultima risposta

Top Posters In This Topic

  • walterword

    154

  • dlgcom

    85

  • Livio Orsini

    46

  • ifachsoftware

    36

Come promesso, comincio a mettere on line qualche cosa su cui lavorare. Troverete allegato lo schema dell'interfaccia encoder. Prossimamente pubblicherò lo schema dell'interfaccia D/A e qualche I/O digitale.

Gli schemi sono indicativi anche se funzionano; devono essere intesi come base di lavoro.

Appena l'avrò sperimentato metterò on line lo schema del simulatore di encoder. In questo modo potremo realizzare i nostri due assi sperimentali.

Link al commento
Condividi su altri siti

Grande Livio, la tua fatica però sarà doppia perché ora io cercherò di capire e farò domande, allo stato attuale mi sento una specie di parassita che non fa nulla e rompe anche un po', comunque...

La mia prima domanda è sulle marche di zero degli encoder, perchè è necessario ricercare la marca di zero di un encoder per azzerare un contatore? io di solito non le gestisco e faccio i cosiddetti "zeri asse" semplicemente andando ad azzerare il contatore degli impulsi encoder con un segnale derivato da un sensore, di solito microinterruttore su camma.

La seconda è:abilito la procedura di zero indipendentemente per i due canali con PE3 e PE6 ma entrambi attivano la stessa porta, PE3, è una procedura standard?

La terza, gli ingressi sono per encoder tipo line drive? cioè, in soldoni, collego a I1 A+ e a I2 A-?

Infine, che cosa posso fare per sentirmi meno inutile :( ?

Link al commento
Condividi su altri siti

Ciao a tutti.

Igor su come fare il ciclo di zero vai a vedere cosa ho scrittto su di un recente post nel forum azionamenti: li troverai le mie considerazioni sulle metodologie relative allo zero macchina; ci sono anche le varie considerazioni di altri utenti, quindi puoi farti un idea panoramica delle problematiche relative.

Se guardi la documentazione HW di rabbit scoprirai che le due narche di zero vanno ad eccitare il medesimo interrupt esterno, la selezione del canale permette anche di riconoscere quale asse sta lavorando.

Gli ingressi dei segnali sono completamente floating, quindi si può usare qualsiasi configurazione: line driver, push-pull, open collector.

Quesito generale: supponendo che la marca di zero sia positiva, cioè è costituita da un impuso positivo, l'interrupt è pilotato dal livello giusto? Attendo le vs. considerazioni.

Prima di andare in ferie (dopo 20-08-03) metterò (spero) on line il circuito del simulatore dell'asse.

Link al commento
Condividi su altri siti

ifachsoftware

Ciao a tutti , volevo segnalarvi che ho appena testato la mia rabbit Board su cui e' innestato un RCM3010 e rimandato a 50 comodi morsetti a vite passo 5mm e funziona il tutto correttamente.

Se a qualcuno interessa lo schema dello stampato in formato AutoCAD , basta chiederlo e se puo' interessare ho anche 2 Stampate su pellicola Blu per fare lo stampato che mi sono avanzate.

Adesso posso iniziare a divertirmi ... (Walter dove seiii ???)

Ciao :)

Link al commento
Condividi su altri siti

Se a qualcuno interessa lo schema dello stampato in formato AutoCAD

A me interessa... se puoi postarlo nella e-mail , mi faresti un favore.

Spero che non sia doppia faccia ....

Saluti

Luca

Link al commento
Condividi su altri siti

ifachsoftware

Ciao DLGCOM , siccome la mail del forum non accetta allegati , ho uploadato il file nella sezione apposita del forum.

Il file e' in formato dwg ed e' un singola faccia.

Oggi ho provato a far lampeggiare un led e accenderne dietro pressione pulsante altri 2 e funziona tutto correttamente anche se sto un po' smadonnando con i settaggi delle porte che hanno ben 5 registri , e cercare le informazioni da PDF o HTML non e' molto agevole , dopo aver stampato anche questi manuali spero che la cosa risulti piu' agevole.

Vi allego l'esempio che ho provato oggi :

Mi sapete dire perche' il led lampeggiante non funziona se collegato alle porte PG4 o PG5 , ma alla PG2 si ???? <_<

#class auto

#ifndef __RCM3000_LIB

#define __RCM3000_LIB

#if (_BOARD_TYPE_ < RCM3000 || _BOARD_TYPE_ > (RCM3000+0x00FF))

#error "RCM3000.LIB only supports RCM3000 series boards."

#endif

// The following macros are used with LCD/Keypad Modules and values

// default here according to the prototyping board. They must be defined

// before using graphic libraries.

// change strobe register here to match your application

#define LCDCSREGISTER IB6CR // Use Port E bit 6 for LCD strobe

#define LCDCSSHADOW IB6CRShadow // define shadow register

#define LCDCSCONFIG 0xB8 // set for 3 waits, I/O (rd and wr) data strobe, allow writes

#define LCDSTROBE 0x40 // bit mask

#define KEYCSREGISTER IB6CR // Use Port E bit 6 for keypad strobe

#define KEYCSSHADOW IB6CRShadow // define shadow register

#define KEYCSCONFIG 0xB8 // set for 3 waits, I/O (rd and wr) data strobe, allow writes

#define KEYSTROBE 0x40 // bit mask

// change base address here to match above strobe address

#define LCDBASEADDR 0xC000 // A15, A14, A13 = 6 for IB6CR I/O address

#define KEYBASEADDR 0xC000 // A15, A14, A13 = 6 for IB6CR I/O address

/*

DESCRIPTION: LED ON/OFF control on LCD/Keypad Modules only.

This function is non-reentrant.

PARAMETER1: LED to control on LCD/Keypad Module.

0 = LED DS1

1 = LED DS2

2 = LED DS3

3 = LED DS4

4 = LED DS5

5 = LED DS6

6 = LED DS7

PARAMETER2: value used to control LED.

0 = OFF

1 = ON

RETURN VALUE: None

*/

nodebug

void ledOut(int led, int value)

{

dispLedOut(led, value);

}

/*

DESCRIPTION: This function initializes parallel ports A through G for use

with the RCM3000 series controllers and prototyping board.

This function is intended for demonstration purposes only

and can be modified for your applications.

Call this function at the beginning of your application

code. This function is non-reentrant.

This function will:

1. Initialize system I/O ports A through G. See table below.

2. Set any unused configurable port pins as outputs and output high.

3. Assume that there is only one controller installed in the Master

position on the prototyping board.

PARAMETER: None

RETURN VALUE: None

Port Function I/O I/O State

==== ============================= ====== ===========================================

PA0 Configurable external I/O bus Output High when not driven by I/O bus

PA1 Configurable external I/O bus Output High when not driven by I/O bus

PA2 Configurable external I/O bus Output High when not driven by I/O bus

PA3 Configurable external I/O bus Output High when not driven by I/O bus

PA4 Configurable external I/O bus Output High when not driven by I/O bus

PA5 Configurable external I/O bus Output High when not driven by I/O bus

PA6 Configurable external I/O bus Output High when not driven by I/O bus

PA7 Configurable external I/O bus Output High when not driven by I/O bus

PB0 Not used Input Pulled-up on core

PB1 Not used Input Pulled-up on core

PB2 Configurable external I/O bus Input Pulled-up on core when not driven by I/O bus

PB3 Configurable external I/O bus Input Pulled-up on core when not driven by I/O bus

PB4 Configurable external I/O bus Input Pulled-up on core when not driven by I/O bus

PB5 Configurable external I/O bus Input Pulled-up on core when not driven by I/O bus

PB6 Not used Output High when not driven by I/O bus

PB7 Not used Output High when not driven by I/O bus

PC0 Not used Output High

PC1 Not used Input Pulled-up on core

PC2 TXC Output High when not driven by RS232

PC3 RXC Input Pulled-up on core when not driven by RS232

PC4 TXB Output High when not driven by RS232

PC5 RXB Input Pulled-up on core when not driven by RS232

PC6 TXA Output High when not driven

PC7 RXA Input Pulled-up on core when not driven

PD0 Realtek RSTDRV Output High when not driven by ethernet

PD1 Not used Input Pulled-up on core

PD2 Not used (jumper not installed) Output High

PD3 Not used (jumper not installed) Output High

PD4 Not used Output High

PD5 Not used Input Pulled-up on protoboard

PD6 Not used (jumper not installed) Output High

PD7 Not used (jumper not installed) Output High

PE0 Not used (jumper not installed) Output High

PE1 Not used Output High

PE2 Realtek AEN Output High when not driven by ethernet

PE3 LCD device select Output Low

PE4 Infrared device speed select Output Low

PE5 Not used Output High

PE6 External I/O Strobe Output High when not driven by LCD/Keypad

PE7 Not used Output High

PF1 Not used - future Motor/Encoder Input Pulled-up on protoboard

PF2 Not used - future Motor/Encoder Input Pulled-up on protoboard

PF3 Not used - future Motor/Encoder Input Pulled-up on protoboard

PF4 Not used - future Motor/Encoder Input Pulled-up on protoboard

PF5 Not used - future Motor/Encoder Input Pulled-up on protoboard

PF6 Not used - future Motor/Encoder Input Pulled-up on protoboard

PF7 Not used - future Motor/Encoder Input Pulled-up on protoboard

PG0 Switch S3 (normally open) Input Pulled-up on protoboard

PG1 Switch S2 (normally open Input Pulled-up on protoboard

PG5 LED DS3 Output High (TXF Output Pulled-down when not driven by infrared)

PG3 RXF Input Driven by infrared driver

PG4 Infrared device MD1 Input Pulled-up on protoboard

PG5 Infrared device MD0 Input Pulled-down on protoboard

PG6 LED DS1 Output High

PG7 LED DS2 Output High

*/

nodebug

void brdInit()

{

// if PORTA_AUX_IO has been defined at the top of application code

// for external I/O bus, do not reconfigure.

#ifndef PORTA_AUX_IO

///////

// configure Port A

// use SPCR to enable and disable external I/O data bus

///////

WrPortI(PADR, &PADRShadow, 0xFF); //set to output all high

WrPortI(SPCR, &SPCRShadow, 0x84); //ignore SMODE pins, set to output

///////

// configure Port B

// use SPCR to enable and disable external I/O address bus

///////

WrPortI(PBDR, &PBDRShadow, 0xC0); //set bits 7,6 to output high

//bits 5-0 are normally inputs

#endif

///////

// configure Port C

// serial port A communicates with Dynamic C

// using serXopen in application code will configure serial ports B and C automatically

// so configuration not needed here

///////

WrPortI(PCDR, &PCDRShadow, PCDRShadow|0x15); //set bits 4,2,0 high

WrPortI(PCFR, &PCFRShadow, PCFRShadow&0xEA); //clear bit 4,2,0 to normal function

//bits 5,3,1 normally inputs

///////

// configure Port D

// using ethernet applications will automatically configure bit 0 for strobe

// so not configured here

///////

WrPortI(PDCR, &PDCRShadow, PDCRShadow&0x00); //clear all bits to pclk/2

WrPortI(PDFR, &PDFRShadow, PDCRShadow&0x00); //clear all bits to normal function

WrPortI(PDDCR, &PDDCRShadow, PDDCRShadow&0x2D); //clear bits 7,6,4,3,2,0 drive high and low

WrPortI(PDDR, &PDDRShadow, PDDRShadow|0xDD); //set bits 7,6,4,3,2,0 output high

WrPortI(PDDDR, &PDDDRShadow, PDDDRShadow|0xDD); //set bits 7,6,4,3,2,0 to output

WrPortI(PDDDR, &PDDDRShadow, PDDDRShadow&0xDD); //clear bits 5,1 to input

///////

// configure Port E

// using LCD/Keypad applications will automatically configure bit 6 for external I/O strobe

// so not configured here

// using ethernet applications will automatically configure port bit 2 for strobe

// so not configured here

///////

WrPortI(PECR, &PECRShadow, PECRShadow&0x00); //clear all bits to pclk/2

WrPortI(PEFR, &PEFRShadow, PECRShadow&0x00); //clear all bits to normal function

WrPortI(PEDR, &PEDRShadow, 0xE7); //set bits 7,6,5,2,1,0 output high and

//set bits 4,3 output low

WrPortI(PEDDR, &PEDDRShadow, PEDDRShadow|0xFB); //set bits 7,6,5,4,3,2,1,0 to output

///////

// configure Port F

// originally for motor/encoders but for anything here

///////

WrPortI(PFCR, &PFCRShadow, 0x00); //clear all bits for pclk/2

WrPortI(PFFR, &PFFRShadow, 0x00); //clear all bits for normal function

//WrPortI(PFDCR, &PFDCRShadow, ???); //future bit drive output

//WrPortI(PFDR, &PFDRShadow, ???); //future bit output

WrPortI(PFDDR, &PFDDRShadow, 0x00); //clear all bits to input

///////

// configure Port G

// infrared device sample program will configure serial port F

///////

WrPortI(PGCR , &PGCRShadow , 0x00); // clear all bits for pclk/2

WrPortI(PGFR , &PGFRShadow , 0x00); // Funzioni Normali

WrPortI(PGDCR , &PGDCRShadow, 0xFF); // Uscite Open Drain

WrPortI(PGDR , &PGDRShadow , 0xFF); // Uscite Alte

WrPortI(PGDDR , &PGDDRShadow, 0xFF); // Tutte Uscite

}

#endif

#define DS1 6 //led, port G bit 6

#define DS2 7 //led, port G bit 7

#define DS3 2 //led, port G bit 2 (Con bit 4-5 Non funzionava)

#define S2 1 //switch, port G bit 1

#define S3 0 //switch, port G bit 0

void main()

{

auto int sw1, sw2, led1, led2;

brdInit(); //initialize board for this demo

led1=led2=1; //initialize leds to off value

sw1=sw2=0; //initialize switches to false value

while (1)

{

costate //wait for switch S2 press

{

if (BitRdPortI(PGDR, S2)) abort;

waitfor(DelayMs(50)); //switch press detected if got to here

if (BitRdPortI(PGDR, S2)) //wait for switch release

{

sw1=!sw1; //set valid switch

abort;

}

}

costate //wait for switch S3 press

{

if (BitRdPortI(PGDR, S3)) abort;

waitfor(DelayMs(50)); //switch press detected if got to here

if (BitRdPortI(PGDR, S3)) //wait for switch release

{

sw2=!sw2; //set valid switch

abort;

}

}

costate

{ // toggle DS1 led upon valid S2 press/release and clear switch

if (sw1)

{

BitWrPortI(PGDR, &PGDRShadow, led1=led1?0:1, DS1);

sw1=!sw1;

}

}

costate

{ // toggle DS2 upon valid S3 press/release and clear switch

if (sw2)

{

BitWrPortI(PGDR, &PGDRShadow, led2=led2?0:1, DS2);

sw2=!sw2;

}

}

// Lampeggia Led 3

costate

{

BitWrPortI(PGDR, &PGDRShadow, 0, DS3); // On

waitfor(DelayMs(100));

BitWrPortI(PGDR, &PGDRShadow, 1, DS3); // Off

waitfor(DelayMs(100));

}

}

}

Ciao a tutti B)

Modificato: da ifachsoftware
Link al commento
Condividi su altri siti

CIAO A TUTTI

SONO ARRIVATO IERI SERA E OGGI DEVO ANDARE A CERCARMI LA VALIGIA

STI M*****I FACCHINI DI ROMA-FIUMICINO MI HANNO GIA ROTTO I COG****I

ERO IN ETIOPIA NON TURCHIA , A 6 ORE DI JIP DA ADDIS ABEBA

ADESSO STARO A CASA-UFFICIO QUALCHE GIORNO

IN ATTESA DI QUALCHE ALTRA AVVENTURA ASSURDA LAVORATIVA

VEDO DI RIUSCIRE A RIACCENDERE IL RABBIT E VEDERE DI RECUPERARE

CIAO A TUTTI

Link al commento
Condividi su altri siti

Il Kit è arrivato.....e come dice ifach ho già cominciato a smadonnare pure io.

( Anche perchè come prima cosa ho provato il comando dei led via rete ).

Vi farò sapere al + presto spero :D ora devo scappare, scusate ( a scaricare lo stampato :P )

Link al commento
Condividi su altri siti

ifachsoftware

Vi informo che ho provato ieri sera l'esempio dei deue led che si accendono tramite HTML ,ed il tutto funziona che e' una meraviglia , le uniche pecche che al momento vedo sono che nonostante le 600-700 pagine di documentazione stampata , andando a leggere bene non e' il massimo della chiarezza ... anzi , pero' da quello che vedo come mezzo e' proprio potente.

Ciao a tutti :)

Link al commento
Condividi su altri siti

Ehm, non ho capito a cosa serve lo stampato..

Ciao Igor,

Lo satmpato serve per disponiblizzare tutti i pin del modulo su comodi connettori a vite .

Semplifica la vita per la " dura " fase di test

saluti

Luca

Link al commento
Condividi su altri siti

Allego lo schema del simulatore di encoder.

Io lo provato con lo XR4151, ma vanno bene anche LM131, LM231, LM331.

Sullo schema ci sono le indicazioni relative ai componenti. Non ho ancora inserito il ritardo per similare l'inerzia del motore.

Se ce la faccio, prima di andare in vacanza (partenza prevista per 21-08, ritorno 27-09) metto on line anche lo schema dell'interfaccia analogica per pilotare l'azionamento virtuale.

Link al commento
Condividi su altri siti

Gabriele Corrieri

Ciao Livio,

complimenti! :D bel colpo!

Questo schema sarà utilissimo a voi per il Rabbit, ma credo sia utile anche per fare verifiche e simulazioni sul campo, grazie Livio!

Ciao

Link al commento
Condividi su altri siti

ifachsoftware
Ehm, non ho capito a cosa serve lo stampato

Lo stampato serve a chi non ha la demo-board (o ha la demo-board e non vuole smadonnare con i connettori passo 2 e montaggi smd) ma ha il solo core module RCM3010 e vuole farsi le prove in maniera piu' comoda.

Tale stampato in pratica adatta tutti i 50 e passa mirsetti del core rinviandoli su morsetti passo 5 a vite in modo che ci si possa facilmente collegare a ingressi o uscite o decodifiche encoder fatte con la mille-fori.

Su tale stampato ho previsto la resistenza da mettere in serie alla batteria , il pulsante di reset , un led di segnalazione presenza 3,3V , un Diodo che mette in corto l'alimentazione in caso di inversione di polarita' in modo da proteggere il core module.

L'alimentazione a 3,3V , la batteria tampone a pastiglia l'ho fatta su una millefori a parte che si collega

con dei fili tramite il morsetto passo 5.

Lo schema dell'alimentatore lo ho uplodato oggi nella sezione Up/download del forum.

CIao :)

Link al commento
Condividi su altri siti

A me questa scheda mi sembra una genialata!

Quasi quasi abbandono la mia "ufficiale" per questa!

Siccome non so neanche da dove si inizia per fare un circuito stampato, c'è qualche buon'anima che, facendolo per se, ne può fare anche altri due o tre....

(uno per il sottoscritto+amici giovani e squattrinati da aiutare)

Chiaramente sono pronto a pagare il tutto!!!Fatemi sapere!

Grazie!!

P.S. Penso che i circuiti sviluppati da Livio e Ifach siano di un interesse estremo e non solo per questo progetto! Complimenti!!

Link al commento
Condividi su altri siti

con questo piccolo firmware si possono vedere i led accesi degli ingressi porta E , quindi scritti dulla porta G

ho usato un ciclo for per risparmiare qualche riga di codice

ho realizzato una millefori con sopra dei switches collegati agli ingressi .

poi ho aggiunto un integrato con 4 A/D e 1 D/A che viene letto su bus I2C

appena li trovo vi mando un client realizzato in visual basic che tramite pulsanti comanda direttamente

le uscite del RABBIT .

qua nel firmware faccio anche la lettura di tutta la porta sottraendo 4 al valore totale , visto che manca

il pin 2 della porta .

ogni 3 secondi viene refreshato la finestra di output del degub del RABBIT per vedere cosa succede

ciao a tutti

il codice:

/*****************************************************

modifica per vedere i led in base agli ingressi

Elettrika2000 - Walter 27\04\03 0.11

****************************************************/

main() {

int totale;

int ingresso[8];

auto i;

WrPortI(PGFR, &PGFRShadow, 0x0); //Setta la porta g come I/O (bit 5 e 7 a livello basso 0)

WrPortI(PGDCR, &PGDCRShadow, 0x0); //Setta il la porta g pullup x0 o open collector xFF

WrPortI(PGDDR, &PGDDRShadow, 0xff); //Setta la porta g come output (gestibile bit bit)

WrPortI(PEDDR, &PEDDRShadow, 0x00); //Setta la porta E come output (gestibile bit bit)

while(1)

{

for(i=0;i<8;i++){

ingresso=BitRdPortI(PEDDR,i);

if (ingresso) { //codice aggiunto per visualizzare tramite led lo stato degli ingressi

BitWrPortI(PGDR, &PGDRShadow, 1, i);

}

else {

BitWrPortI(PGDR, &PGDRShadow, 0, i); //finisce qua il codice aggiunto

}}

totale=RdPortI(PEDDR)-4; // il bit 2 della porta E non esiste ma viene considerato dal processore

// sempre settato a 1 per default , quindi sottraggo al valore totale

// del byte di ingresso -4 (4 e' il valore in binario decimale del bit 2)

costate {

waitfor(DelayMs(3000));

printf("valore ingresso 0=%d\n",ingresso[0]);

printf("valore ingresso 1=%d\n",ingresso[1]);

printf("valore ingresso 2=%d\n",ingresso[2]);

printf("valore ingresso 3=%d\n",ingresso[3]);

printf("valore ingresso 4=%d\n",ingresso[4]);

printf("valore ingresso 5=%d\n",ingresso[5]);

printf("valore ingresso 6=%d\n",ingresso[6]);

printf("valore ingresso 7=%d\n",ingresso[7]);

printf("totale=%d\n",totale);

}

}

}

Link al commento
Condividi su altri siti

  • 1 month later...

Sono riuscito a gestire le uscite (avevo dei problemi con le aree Shadow ....) vi posto il sorgente per lampeggiare 2 led ed accendene un altro tramite pulsante.

/* IFACH Software - Calpe , Costa Blanca

-------------------------------------

Program name : PROVAUSCITE.C

Last Update  : 7/Sep/2003

Language ... : Dinamic C SE

Features ... : Test Uscite RCM3010                           

                  7/Sep/2003 Versione con Out funzionanti (Finalmente !)

*/

#class auto  // Place local variables on the stack.

/*

Port Function      I/O  I/O State

==== =============================  ====== ===========================================

PA0 Configurable external I/O bus  Output High when not driven by I/O bus

PA1 Configurable external I/O bus  Output High when not driven by I/O bus

PA2 Configurable external I/O bus  Output High when not driven by I/O bus

PA3 Configurable external I/O bus  Output High when not driven by I/O bus

PA4 Configurable external I/O bus  Output High when not driven by I/O bus

PA5 Configurable external I/O bus  Output High when not driven by I/O bus

PA6 Configurable external I/O bus  Output High when not driven by I/O bus

PA7 Configurable external I/O bus  Output High when not driven by I/O bus

PB0 Not used      Input  Pulled-up on core

PB1 Not used      Input  Pulled-up on core

PB2 Configurable external I/O bus  Input  Pulled-up on core when not driven by I/O bus

PB3 Configurable external I/O bus  Input  Pulled-up on core when not driven by I/O bus

PB4 Configurable external I/O bus  Input  Pulled-up on core when not driven by I/O bus

PB5 Configurable external I/O bus  Input  Pulled-up on core when not driven by I/O bus

PB6 Not used      Output High when not driven by I/O bus

PB7 Not used      Output High when not driven by I/O bus

PC0 Not used      Output High

PC1 Not used      Input  Pulled-up on core

PC2 TXC          Output High when not driven by RS232

PC3 RXC          Input  Pulled-up on core when not driven by RS232

PC4 TXB          Output High when not driven by RS232

PC5 RXB          Input  Pulled-up on core when not driven by RS232

PC6 TXA          Output High when not driven

PC7 RXA          Input  Pulled-up on core when not driven

PD0 Realtek RSTDRV    Output High when not driven by ethernet

PD1 Not used      Input  Pulled-up on core

PD2 Not used (jumper not installed) Output High

PD3 Not used (jumper not installed) Output High

PD4 Not used      Output High

PD5 Not used      Input  Pulled-up on protoboard

PD6 Not used (jumper not installed) Output High

PD7 Not used (jumper not installed) Output High

PE0 Not used (jumper not installed) Output High

PE1 Not used      Output High

PE2 Realtek  AEN    Output High when not driven by ethernet

PE3 LCD device select      Output Low

PE4 Infrared device speed select  Output Low

PE5 Not used      Output High

PE6 External I/O Strobe  Output High when not driven by LCD/Keypad

PE7 Not used      Output High

PF1 Not used - future Motor/Encoder Input  Pulled-up on protoboard

PF2 Not used - future Motor/Encoder Input  Pulled-up on protoboard

PF3 Not used - future Motor/Encoder Input  Pulled-up on protoboard

PF4 Not used - future Motor/Encoder Input  Pulled-up on protoboard

PF5 Not used - future Motor/Encoder Input  Pulled-up on protoboard

PF6 Not used - future Motor/Encoder Input  Pulled-up on protoboard

PF7 Not used - future Motor/Encoder Input  Pulled-up on protoboard

PG0 Switch S3 (normally open) Input  Pulled-up on protoboard    (PULSANTE 1)

PG1 Switch S2 (normally open Input  Pulled-up on protoboard    (PULSANTE 2)

PG2 TXF          Output Pulled-down when not driven by infrared

PG3 RXF          Input  Driven by infrared driver  (LED3)

PG4 Infrared device MD1  Input  Pulled-up on protoboard

PG5 Infrared device MD0  Input  Pulled-down on protoboard

PG6 LED LED1      Output High                    (LED1)

PG7 LED LED2      Output High                    (LED2)       

*/

nodebug

void brdInit()

{

// configure Port A

// use SPCR to enable and disable external I/O data bus

WrPortI(PADR, &PADRShadow, 0xFF);          // set to output all high

WrPortI(SPCR, &SPCRShadow, 0x84);          // ignore SMODE pins, set to output

// configure Port B

// use SPCR to enable and disable external I/O address bus

WrPortI(PBDR, &PBDRShadow, 0xC0);          // set bits 7,6 to output high

                      // bits 5-0 are normally inputs 

// configure Port C

// serial port A communicates with Dynamic C

// using serXopen in application code will configure serial ports B and C automatically

// so configuration not needed here

WrPortI(PCDR, &PCDRShadow, PCDRShadow|0x15);  // set bits 4,2,0 high

WrPortI(PCFR, &PCFRShadow, PCFRShadow&0xEA);  // clear bit 4,2,0 to normal function

              // bits 5,3,1 normally inputs

// configure Port D

// using ethernet applications will automatically configure bit 0 for strobe

// so not configured here

WrPortI(PDCR, &PDCRShadow, PDCRShadow&0x00);  // clear all bits to pclk/2

WrPortI(PDFR, &PDFRShadow, PDCRShadow&0x00);  // clear all bits to normal function

WrPortI(PDDCR, &PDDCRShadow, PDDCRShadow&0x2D); // clear bits 7,6,4,3,2,0 drive high and low

WrPortI(PDDR, &PDDRShadow, PDDRShadow|0xDD);  // set bits 7,6,4,3,2,0 output high

WrPortI(PDDDR, &PDDDRShadow, PDDDRShadow|0xDD); // set bits 7,6,4,3,2,0 to output

WrPortI(PDDDR, &PDDDRShadow, PDDDRShadow&0xDD); // clear bits 5,1 to input

// configure Port E

// using LCD/Keypad applications will automatically configure bit 6 for external I/O strobe

// so not configured here

// using ethernet applications will automatically configure port bit 2 for strobe

// so not configured here

WrPortI(PECR, &PECRShadow, PECRShadow&0x00);  // clear all bits to pclk/2

WrPortI(PEFR, &PEFRShadow, PECRShadow&0x00);  // clear all bits to normal function

WrPortI(PEDR, &PEDRShadow, 0xE7);  // set bits 7,6,5,2,1,0 output high and

              // set bits 4,3 output low

WrPortI(PEDDR, &PEDDRShadow, PEDDRShadow|0xFB); // set bits 7,6,5,4,3,2,1,0 to output

// configure Port F

// originally for motor/encoders but for anything here

WrPortI(PFCR, &PFCRShadow, 0x00);  // clear all bits for pclk/2

WrPortI(PFFR, &PFFRShadow, 0x00);  // clear all bits for normal function

//WrPortI(PFDCR, &PFDCRShadow, ???);    // future bit drive output

//WrPortI(PFDR, &PFDRShadow, ???);  // future bit output

WrPortI(PFDDR, &PFDDRShadow, 0x00);  // clear all bits to input

// configure Port G

// infrared device sample program will configure serial port F

/*

WrPortI(PGCR, &PGCRShadow, 0x00);  // clear all bits for pclk/2

WrPortI(PGFR, &PGFRShadow, 0x00);  // clear all bits for normal function

WrPortI(PGDCR, &PGDCRShadow, PGDCRShadow|0xC0); // set bits 7,6 drive open drain

WrPortI(PGDR, &PGDRShadow, PGDCRShadow|0xC0); // set bit 7,6 output high

BitWrPortI(PGDCR, &PGDCRShadow, 0, 2);    // clear bit 2 drive output

BitWrPortI(PGDR, &PGDRShadow, 0, 2);    // clear bit 2 output low

WrPortI(PGDDR, &PGDDRShadow, 0xC4);  // set bits 7,6,2 to output and

                                              // clear bits 5,4,3,1,0 to input

PG0 Switch S3 (normally open) Input  Pulled-up on protoboard    (PULSANTE 1)

PG1 Switch S2 (normally open Input  Pulled-up on protoboard    (PULSANTE 2)

PG2 TXF          Output Pulled-down when not driven by infrared

PG3 RXF          Input  Driven by infrared driver  (LED3)

PG4 Infrared device MD1  Input  Pulled-up on protoboard

PG5 Infrared device MD0  Input  Pulled-down on protoboard

PG6 LED LED1      Output High                    (LED1)

PG7 LED LED2      Output High                    (LED2)   

*/

WrPortI(PGCR , &PGCRShadow , 0x00);  // clear all bits for pclk/2

WrPortI(PGFR , &PGFRShadow , 0x00);  // clear all bits for normal function

WrPortI(PGDCR, &PGDCRShadow, 0xC8);        // Out 3,7,6 open drain

WrPortI(PGDR , &PGDRShadow , PGDCRShadow|0xC8); // set bit 3,7,6 output high

WrPortI(PGDDR, &PGDDRShadow, 0xC8);  // 3,7,6 = Uscite gli altri = Input                                               

}

// Definizioni costanti

#define LED1 6  // LED 1 port G bit 6

#define LED2 7  // LED 2 port G bit 7

#define LED3 3  // LED 3 port G bit 3

#define PULS1  0  // SWITCH 2 port G bit 0

#define PULS2  1  // SWITCH 1 port G bit 1

void LedGOn(int led)

{

BitWrPortI(PGDR, &PGDRShadow, 0, led);

}

void LedGOff(int led)

{

BitWrPortI(PGDR, &PGDRShadow, 1, led);

}

cofunc flashled[2](int led, int ontime, int offtime)

{

LedGOn(led);

waitfor(DelayMs(ontime));

LedGOff(led);

waitfor(DelayMs(offtime));

}

void main()

{

auto int sw1;

brdInit();                    // Initializza il modulo

sw1 = 0;

for(;;)

{

  costate

  {

if (BitRdPortI(PGDR, PULS1)) abort;  // wait for switch PULS1 press

waitfor(DelayMs(10));            // switch press detected if got to here

if (BitRdPortI(PGDR, PULS1))      // wait for switch release

{

    sw1=!sw1;            // set valid switch

      BitWrPortI(PGDR, &PGDRShadow, sw1, LED3);

    abort;

}

  }

  costate

  {       

    wfd

    {

    // 50 ms on/off

    flashled[0](LED1,50,50);  // flashes LED1 (PG6)

  }

  }

 

  costate

  {

wfd

{

    // 200 ms on/100 ms off

    flashled[1](LED2,200,100); // flashes LED2 (PG7)

}

  }

}

}

Mi piacerebbe vedere qualcun altro che ci lavora ... :(

Ciao a tutti :)

Link al commento
Condividi su altri siti

Bravo ifachsoftware!

Io non sono in grado ..... ci ero riuscito nel 1978 facendo accendere dei led in sequenza con il primo micro della National, si chiamava SC/MP, poi mi sono ritirato dalla programmazione.

Buon lavoro!

Mario

Link al commento
Condividi su altri siti

  • 1 month later...

Ciao ragazzi,

io sono stato in vacanza, ma durante l'assenza non si è mosso niente.

Gradirei sapere se siete ancora vivi! Specie coloro i quali hanno acquistato il kit o comunque hanno iniziato a sviluppare qualche cosa.

Ho allegato un documento, l'ennesimo, con il riassunto di quanto è stato fatto e dei prossimi passi.

Attendo le Vs. risposte, sopra a tutto è necessario stabilire chi fa che cosa.

Fatevi sentire!

Link al commento
Condividi su altri siti

  • 4 weeks later...

Ciao a tutti sono un amico di Igor. Ho letto quasi tutti i post che avete fatto e noto con dispiacere che il progetto sta rallentando la sua corsa. Io ho gia comprato tutto il kit del rabbit e sto aspettando con impazienza che arrivi. Nel frattempo mi sto studiando il funzionamento sul sito della rabbit e anche se non ci capisco piu di tanto in quanto non ho mai avuto a che fare con sta roba mi interessa molto e penso che ci si possa davvero tirare fuori qualcosa di tosto. Inoltre sono anche senza software. Sapete per caso se si puo scaricare da qualche parte? Anche un versione demo o shareware. Per il momento vi saluto e alla prossima. Se avete voglia postate per noi Newbie :unsure: qualche programmino interessante per poter capire un po le basi. Ciao a tutti!

Link al commento
Condividi su altri siti

Dire rallentato è un pietoso eufemismo. Visto lo scarso interesse ho smesso di mettere on line roba. Comunque io intendo andare avanti anche da solo. Prossimamente, dopo averla, provata metterò on line un'interfaccia analogica e magari aqualche esempio.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

×
×
  • Crea nuovo/a...