Hallo

Wij zijn 2 leerlingen uit het zesde jaar elektriciteit-elektronica en moeten een eindwerk maken. Dit zal een spinningled dispaly worden. Hiervoor zouden we graag de tekst via seriële connectie de tekst kunnen aanpassen. We gebruiken de compiler high tech van microchip. Het is de bedoeling als we op 0 drukken dat de tekst wordt teruggestuurd naar hyperterminal, dit lukt niet.

Dit is wat we tot hiertoe hebben voor de seriële connectie.


void main()
{									
        char *Input;	
	char *in;
	
	int n;

   Init_Pic();
   init_comms();
	
	*in =getch();
	
	while( in != "0")
	{
		*Input = *Input + *in;
		*in = getch();
	}
		putch(*Input);
 }      

Weet er iemand wat we fout doen ?

[Bericht gewijzigd door Henry S. op (1%)]

Gebruik code tags!

Ik zou eens beginnen met wat basis C want volgens mij mis je die.

2 pointers zonder ze te initialiseren, waardoor ze mogelijk random blijven.
in != "0" -> adres met een string vergelijken? Gaat nooit werken..
*input = *input+*in; Volgens mij heb je in je hoofd dat je de nieuwe input aan een string toevoegd, maar dat gebeurt zeker niet. Je telt nu gewoon op. Dan nog, waarom getch gebruiken (get char) als je ook gets kan gebruiken (get string)?

Ga eens opzoek naar arrays & pointers. Het verschil tussen strings en chars (tip: "" en '').

We kunnen geen strings gebruiken bij deze pic met high tech.

Andere PIC nemen dan maar ? Voor een spinningled display is het gebruik van strings wel handig als je teksten wilt laten zien.

We kunnen al tekst laten zien, maar nu moeten we de PIC steeds uit de schakeling halen om de tekst te veranderen. Dit moet via seriële connectie.

Dit is een link naar een filmpje van wat we al hebben.
http://www.youtube.com/watch?v=eaRvTNsLxOQ

Dit is het volledig programma


#include <pic.h>
#include <htc.h>
#include <string.h>
#include "usart.h"
//#pragma's voor 16f628
__CONFIG(WDTDIS & MCLREN & ER & HS &  LVPDIS & PWRTEN & BOREN & DATUNPROT & EC);

#define _XTAL_FREQ 20000000 

#define LED0 RA0
#define LED1 RA1
#define LED2 RB0
#define LED3 RB3
#define LED4 RB4
#define LED5 RB5
#define LED6 RB6
#define LED7 RB7

#define HALL RA3		//Hall sensor

void Wachten(int tijd_10us)
{
  unsigned int n;
  
  for (n=0;n<tijd_10us;n++)
  {
   __delay_us(10);
  }
}

void Frame_uit(unsigned char Ingang)
{
    if ((Ingang & 1) != 0) LED0 = 1; else LED0 = 0;
    if ((Ingang & 2) != 0) LED1 = 1; else LED1 = 0;
    if ((Ingang & 4) != 0) LED2 = 1; else LED2 = 0;
    if ((Ingang & 8) != 0) LED3 = 1; else LED3 = 0;
    if ((Ingang & 16) != 0) LED4 = 1; else LED4 = 0;
    if ((Ingang & 32) != 0) LED5 = 1; else LED5 = 0;
    if ((Ingang & 64) != 0) LED6 = 1; else LED6 = 0;
    if ((Ingang & 128) != 0) LED7 = 1; else LED7 = 0;
	Wachten(4000); 
}

void Karakter_naar_Frames (char Karakter)
{
 switch (Karakter)
	{
	case 'A' : case 'a' : Frame_uit(0b00011111);Frame_uit(0b00100100);Frame_uit(0b01000100);Frame_uit(0b00100100);Frame_uit(0b00011111);Frame_uit(0b00000000);break;
	case 'B' : case 'b' : Frame_uit(0b01111111);Frame_uit(0b01001001);Frame_uit(0b01001001);Frame_uit(0b01001001);Frame_uit(0b00110110);Frame_uit(0b00000000);break;
	case 'C' : case 'c' : Frame_uit(0b00111110);Frame_uit(0b01000001);Frame_uit(0b01000001);Frame_uit(0b01000001);Frame_uit(0b00100010);Frame_uit(0b00000000);break;
	case 'D' : case 'd' : Frame_uit(0b01111111);Frame_uit(0b01000001);Frame_uit(0b01000001);Frame_uit(0b01000001);Frame_uit(0b01111110);Frame_uit(0b00000000);break;
	case 'E' : case 'e' : Frame_uit(0b01111111);Frame_uit(0b01001001);Frame_uit(0b01001001);Frame_uit(0b01001001);Frame_uit(0b01000001);Frame_uit(0b00000000);break;
	case 'F' : case 'f' : Frame_uit(0b01111111);Frame_uit(0b01001000);Frame_uit(0b01001000);Frame_uit(0b01001000);Frame_uit(0b01000000);Frame_uit(0b00000000);break;
	case 'G' : case 'g' : Frame_uit(0b01111110);Frame_uit(0b01000001);Frame_uit(0b01001001);Frame_uit(0b01001001);Frame_uit(0b00101110);Frame_uit(0b00000000);break;
	case 'H' : case 'h' : Frame_uit(0b01111111);Frame_uit(0b00001000);Frame_uit(0b00001000);Frame_uit(0b00001000);Frame_uit(0b01111111);Frame_uit(0b00000000);break;
	case 'I' : case 'i' : Frame_uit(0b01000001);Frame_uit(0b01111111);Frame_uit(0b01000001);Frame_uit(0b00000000);break;
	case 'J' : case 'j' : Frame_uit(0b00000010);Frame_uit(0b00000001);Frame_uit(0b01000001);Frame_uit(0b01111110);Frame_uit(0b01000000);Frame_uit(0b00000000);break;
	case 'K' : case 'k' : Frame_uit(0b01111111);Frame_uit(0b00001000);Frame_uit(0b00010100);Frame_uit(0b00100010);Frame_uit(0b01000001);Frame_uit(0b00000000);break;
	case 'L' : case 'l' : Frame_uit(0b01111111);Frame_uit(0b00000001);Frame_uit(0b00000001);Frame_uit(0b00000001);Frame_uit(0b00000001);Frame_uit(0b00000000);break;
	case 'M' : case 'm' : Frame_uit(0b01111111);Frame_uit(0b00100000);Frame_uit(0b00010000);Frame_uit(0b00100000);Frame_uit(0b01111111);Frame_uit(0b00000000);break;
	case 'N' : case 'n' : Frame_uit(0b01111111);Frame_uit(0b00100000);Frame_uit(0b00010000);Frame_uit(0b00001000);Frame_uit(0b01111111);Frame_uit(0b00000000);break;
	case 'O' : case 'o' : Frame_uit(0b00111110);Frame_uit(0b01000001);Frame_uit(0b01000001);Frame_uit(0b01000001);Frame_uit(0b00111110);Frame_uit(0b00000000);break;
	case 'P' : case 'p' : Frame_uit(0b01111111);Frame_uit(0b01001000);Frame_uit(0b01001000);Frame_uit(0b01001000);Frame_uit(0b00110000);Frame_uit(0b00000000);break;
	case 'Q' : case 'q' : Frame_uit(0b00111110);Frame_uit(0b01000001);Frame_uit(0b01000101);Frame_uit(0b01000010);Frame_uit(0b00111101);Frame_uit(0b00000000);break;
	case 'R' : case 'r' : Frame_uit(0b01111111);Frame_uit(0b01001000);Frame_uit(0b01001100);Frame_uit(0b01001010);Frame_uit(0b00110001);Frame_uit(0b00000000);break;
	case 'S' : case 's' : Frame_uit(0b00110010);Frame_uit(0b01001001);Frame_uit(0b01001001);Frame_uit(0b01001001);Frame_uit(0b00100110);Frame_uit(0b00000000);break;
	case 'T' : case 't' : Frame_uit(0b01000000);Frame_uit(0b01000000);Frame_uit(0b01111111);Frame_uit(0b01000000);Frame_uit(0b01000000);Frame_uit(0b00000000);break;
	case 'U' : case 'u' : Frame_uit(0b01111110);Frame_uit(0b00000001);Frame_uit(0b00000001);Frame_uit(0b00000001);Frame_uit(0b01111110);Frame_uit(0b00000000);break;
	case 'V' : case 'v' : Frame_uit(0b01110000);Frame_uit(0b00001100);Frame_uit(0b00000011);Frame_uit(0b00001100);Frame_uit(0b01110000);Frame_uit(0b00000000);break;
	case 'W' : case 'w' : Frame_uit(0b01111111);Frame_uit(0b00000010);Frame_uit(0b00000100);Frame_uit(0b00000010);Frame_uit(0b01111111);Frame_uit(0b00000000);break;
	case 'X' : case 'x' : Frame_uit(0b01100011);Frame_uit(0b00010100);Frame_uit(0b00001000);Frame_uit(0b00010100);Frame_uit(0b01100011);Frame_uit(0b00000000);break;
	case 'Y' : case 'y' : Frame_uit(0b01100000);Frame_uit(0b00010000);Frame_uit(0b00001111);Frame_uit(0b00010000);Frame_uit(0b01100000);Frame_uit(0b00000000);break;
	case 'Z' : case 'z' : Frame_uit(0b01000011);Frame_uit(0b01000101);Frame_uit(0b01001001);Frame_uit(0b01010000);Frame_uit(0b01100000);Frame_uit(0b00000000);break;
	case '-' : Frame_uit(0b00000000);Frame_uit(0b00001000);Frame_uit(0b00001000);Frame_uit(0b00001000);Frame_uit(0b00001000);Frame_uit(0b00000000);break;
	case ' ' : Frame_uit(0b00000000);Frame_uit(0b00000000);Frame_uit(0b00000000);Frame_uit(0b00000000);Frame_uit(0b00000000);Frame_uit(0b00000000);break;
	default : break;
	}
}


void Init_Pic(void)
{
	//Configuratie Poort A
    asm("CLRF _PORTA");
	CMCON = 0x07;								//Comparators uitschakelen Poort A - alles digitaal
	TRISA = 0b00001000;							//Alles als uitgang, behalve pin A2 = Hall sensor input 1=input 0=output
	//VRCON

    //Configuratie Poort B
    asm("CLRF _PORTB");
	TRISB = 0x00;		
	OPTION = 0b00000000;						//bit 7 = 1 ==> pull up poort B staat af
	PIE1 = 0b00000000;
	INTCON = 0b00000000;	

	Frame_uit(0b10101010);
	Wachten(5000);
	Frame_uit(0b01010101);
	Wachten(5000);
	Frame_uit(0b00000000);
} 

void main()
{
    char *Tekst;		//Adres waar tekst staat welke moet worden getoond - einde met "\0"

	char *Input;	
	char *in;
	
	int n;

    Init_Pic();
	init_comms();

	
	
	*in =getch();
	
	while( in != "0")
	{
		*Input = *Input + *in;
		*in = getch();
	}
		putch(*Input);
       

    
while(1)
{


	while (*Tekst != 0)	
         {								*Tekst = *Input;
         Karakter_naar_Frames(*Tekst);
         Tekst++;
								}      			  
}






}

[Bericht gewijzigd door Henry S. op (0%)]

Is dit iets voor je eindwerk op zo?
Ik zou de mogelijkheden van een andere PIC toch nagaan. Een spinningled die tekst moet tonen zonder strings te gebruiken lijkt me behoorlijk onlogisch. Uiteindelijk maak je het nodeloos complex, of maak je een toestel dat niet echt veel kan.

Er lijkt me een discripantie te zijn tussen je eerste programmatje dat je voorstelt op dit forum en het andere (lange versie). Waar hebben jullie dat programma gehaald? Dat is interessant om weten, want daar zijn er misschien andere opties te vinden.

Laat eens weten welke problemen er juist zijn, ik kan misschien helpen met wat problemen, maar je zal je toch een hééél stuk meer in C moeten leren werken.

verder:

*Input = *Input + *in ---> dit lijkt me toch te wijzen op gebruik van Strings, of vergis ik me?

Dit programma hebben we volledig zelf geschreven.
Het * wilt zeggen dat je het in een vast adres in de PIC schrijft. Zo kan je inderdaad tekst gebruiken maar je kan bijvoorbeeld niet get string gebruiken omdat de compiler dit niet kent bij onze PIC. We moeten nu gewoon seriële verbinding kunnen maken tussen de PIC en de pc.
We kunnen al verbinding maken maar we kunnen er steeds maar 1 character in zetten. Dat moeten er meer zijn.
Daarom heb ik het in een lus gestopt zolang in verschillend is van 0 komt er steeds een character bij. Als het 0 is wordt de te tonen tekst volledig teruggestuurd naar hyperterminal.
Dit werkt nog niet.

* wijst volgens mij op het gebruik van pointers, zo vast zijn die adressen niet denk ik dan. Jullie pointers zweeft -- je initialiseert ze immers niet volgens mij.
Je zal wat basiskennis moeten opdoen over pointers vrees ik, daar komt toch wat bij kijken.
Ben je zeker dat het gebruik van strings niet kan bij jullie?

Is het dan zo dat je bij het drukken van de 0 er niet meer in slaagt om zinnejes zoals "10 keer goedkoper" te tonen?

over pointers:

http://nl.wikibooks.org/wiki/Programmeren_in_C%2B%2B/Pointers
http://www.wiskunst.nl/cursus/programmeren/p13.html

Dit is een mooie link met alle basisbegrippen van c, waaronder pointers.
succes ermee!
http://didactiekinf.uhasselt.be/schakelprogram/lesmateriaal/cursusc.pd…

Op 28 februari 2011 11:39:16 schreef ziggydoodle:

Is het dan zo dat je bij het drukken van de 0 er niet meer in slaagt om zinnejes zoals "10 keer goedkoper" te tonen?

Dit gebeurt inderdaad niet.
Toch al bedankt voor de websites!

Op 28 februari 2011 10:13:52 schreef relisys:
We kunnen geen strings gebruiken bij deze pic met high tech.

C kent ook geen string type, alleen arrays. Ik kan me niet voorstellen dat je geen array aan kan maken.

We kunnen al verbinding maken maar we kunnen er steeds maar 1 character in zetten. Dat moeten er meer zijn.
Daarom heb ik het in een lus gestopt zolang in verschillend is van 0 komt er steeds een character bij...
Dit werkt nog niet.

Wat je doet is optellen. http://www.asciitable.com/. A = 65, B = 66. Als in = B en input = A dan zal *input=*input+*in de waarde 131 opslaan in *input en niet AB. Je hebt sowieso geen pointers voor dit stukje nodig, de array is gewoon een locale variabele. Een pointer naar je aray is nutteloos.

Je hebt nu 2 opties:

Beetje kloten en hulp vragen en dan hopen dat het uiteindelijk goed komt met je programma, zonder dat je snapt hoe het werkt. Of:
Dit "project" even aan de kant leggen (ookal is het voor school), dan onderstaand boek goed lezen en ook wat van de opdrachten maken. Zorg ervoor dat je hoofdstuk 1 t/m 5 echt snap, en het liefst ook hoofdstuk 6. Hoofdstuk 7 ook even bekijken voor het I/O gedeelte.

het c boek Gevonden met een beetje creatief google gebruik ;)

Je hebt nu 2 opties:

Beetje kloten en hulp vragen en dan hopen dat het uiteindelijk goed komt met je programma, zonder dat je snapt hoe het werkt. Of:
Dit "project" even aan de kant leggen (ookal is het voor school), dan onderstaand boek goed lezen en ook wat van de opdrachten maken. Zorg ervoor dat je hoofdstuk 1 t/m 5 echt snap, en het liefst ook hoofdstuk 6. Hoofdstuk 7 ook even bekijken voor het I/O gedeelte.

Ik denk dat dit de juiste analyse is. Werk aan jullie basiskennis C. Het lijkt me niet direct logisch dat je dit programma zelf hebt geschreven en die basiskennis dan weer niet hebt.

C kent ook geen string type, alleen arrays. Ik kan me niet voorstellen dat je geen array aan kan maken.

inderdaad, Bas.

We hebben dit programma wel volledig zelf geschreven. Die pointers heb ik uit een oud boek over c taal gehaald(ik had hier nog nooit van gehoord) toen ik iets zocht om toch een tekst te kunnen ingeven. Maar er stond niet echt veel info bij over hoe je ze moest gebruiken, maar ik dacht dat het wel zou lukken. Ik ga nu eerst inderdaad eens wat info over pointers lezen en proberen begrijpen.

Al bedankt voor de info!!