PIC16F688 Probleme

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 26 11 2024  07:23:35      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
PIC16F688 Probleme

    







BID = 533771

P51D

Neu hier



Beiträge: 35
Wohnort: Bern
 

  


Hallo alle

ich habe mal ein wenig mit dem oben genannten Pic etwas experimentieren wollen, und dazu habe ich ein kleines Testprintli gemacht.

alle Pins ausser Pin 1,4, 14 sind entweder als Eingang(PORTA),oder als Ausgang(PORTC) besetzt.
an PORTA sind die pins über einen 10k Widerstand auf GND geschaltet und auch noch über einen Taster auf 5V.
MCLR ist über einen 10k Widerstand auf 5V.

Dann habe ich versucht mein erstes Programm zu Schreiben:


Code :


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

Titel:

File:
Funktion:

Hardware:
Verfasser:
Datum:
Version: 1.0

*****************************************************/
//Header-File
#include <16F688.h> // Header File einfügen

//Configurationword
#fuses NOWDT //No Watch Dog Timer
#fuses INT_RC //Interner Oszilator
#fuses NOPROTECT //Kein Kopierschutz
#fuses NOBROWNOUT //Kein Brouwnout Reset
#fuses MCLR

//PIC-Takt
#use delay(clock=4000000) // DelayZeit vorgeben (Quarz)

#Byte PortC = 0x07 // PortC definieren
#Byte PortA = 0x05 // PortA definieren

#Bit led0 = PortC.0 //Maskierung Led0
#Bit led1 = PortC.1 //Maskierung Led1
//***************************************************
void main(void){ // Hauptprogramm
Set_Tris_A(0xFF); // Port B auf Input
Set_Tris_C(0x00); // Port D auf Output
for(;;){ // Endlosschlaufe
led0 = 1; //Led0 on
led1 = 1; //Led1 on
}
}
//***************************************************



Nur funktioniert es nicht.
Kann mir jemand ein wenig auf die Sprünge helfen??

MFG
P51D

[ Diese Nachricht wurde geändert von: P51D am 10 Jul 2008 16:51 ]

BID = 533782

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

 

  

Wenn ich das recht sehe, ist alles was von dieser Sequenz
Zitat :
#fuses NOWDT //No Watch Dog Timer
#fuses INT_RC //Interner Oszilator
#fuses NOPROTECT //Kein Kopierschutz
#fuses NOBROWNOUT //Kein Brouwnout Reset
#fuses MCLR
übrigbleibt, die letzte Zeile.

Der Assemblerprogrammierer verANDet solche Bitwerte gewöhnlich:
NOWDT &INT_RC &NOPROTECT &NOBROWNOUT &MCLR

_________________
Haftungsausschluß:



Bei obigem Beitrag handelt es sich um meine private Meinung.



Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.



Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !

BID = 533798

P51D

Neu hier



Beiträge: 35
Wohnort: Bern

was meinst du mit "übrig bleibt, die letzte Zeile"?

sollte es vielleicht MCLRE anstelle von MCLR heissen??

BID = 533805

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

Soll heissen, dass der Wert von fuses jedesmal neu definiert wird und so nur die letzte Anweisung zum Tragen kommt.


_________________
Haftungsausschluß:



Bei obigem Beitrag handelt es sich um meine private Meinung.



Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.



Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !

BID = 533807

P51D

Neu hier



Beiträge: 35
Wohnort: Bern

Die ganzen fuses werden nur beim Start definiert. Danach kommt erst die Endlosschlaufe.


Aber ich glaube, dass ich den Hauptfehler gefunden habe:
Das MPLAB ICD2 hatte mir beim Programmieren zwar nie "gemotzt" aber seit ich das Ding auch noch separat Speise klapts aufs mal.

Mitlerweile habe ich folgenden Code:


Code :


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

Titel: Tast2LED

File: T2L_1.c
Funktion: Wenn Taster 0 gedrückt ==> LED 0 on, wenn...

Hardware: ASCOM PicBoard Advanced
Verfasser: D. Frauenfelder
Datum: 11.03.2005
Version: 1.0

*****************************************************/
//Header-File
#include <16F688.h> // Header File einfügen

//Configurationword
#fuses NOWDT //No Watch Dog Timer
#fuses INTRC_IO //Interner Oszilator
#fuses NOPROTECT //Kein Kopierschutz
#fuses NOBROWNOUT //Kein Brouwnout Reset
#fuses MCLR

//PIC-Takt
#use delay(clock=4000000) // DelayZeit vorgeben (Quarz)

#Byte PortC = 0x07 // PortC definieren
#Byte PortA = 0x05 // PortA definieren

#Bit led0 = PortC.0
#Bit led1 = PortC.1
//***************************************************
void main(void){ // Hauptprogramm
Set_Tris_A(0xFF); // Port B auf Input
Set_Tris_C(0x00); // Port D auf Output
for(;;){ // Endlosschlaufe
led0 = 1;
led1 = 0;
Delay_ms(1000);
led0 = 0;
led1 = 1;
Delay_ms(1000);
}
}
//***************************************************


BID = 533810

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Hallo perl,

Ich kenne mich mit PICs ja nicht aus, aber angenommen, die Definitionen sind Bitmasken, mit gesetzten Bits für eine Einstellung; müsste man sie dann nicht verODERn, anstatt verUNDen?

Also, ich meine sowas:

#define Einstellung1 1
#define Einstellung2 2
#define Einstellung3 4
#define Einstellung4 8

#define Einstellungen Einstellung1 | Einstellung2 | Einstellung4

(man könnte auch die Einstellungen jeweils summieren, ist das selbe)




Edit: Oder ich habe einfach nicht verstanden, worum es geht

_________________


[ Diese Nachricht wurde geändert von: DonComi am 10 Jul 2008 19:34 ]

BID = 533834

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
müsste man sie dann nicht verODERn, anstatt verUNDen?

Das ist prinzipiell egal, es hängt davon ab, wie solche Begriffe definiert sind.
In den mitgelieferten Headers bzw. Include Files sind sie so definiert, dass man sie mittels AND kombinieren kann.
Wenn du z.B. Bit3 und Bit2 beinflussen willst, dann kannst du folgende Konstanten zum ANDen verwenden:
SetBit3 00001000 , ResetBit3 11110111
SetBit2 00000100 , ResetBit2 11111011

Das passiert auch nicht zur Laufzeit, wie P51D vermutet "Die ganzen fuses werden nur beim Start definiert. Danach kommt erst die Endlosschlaufe." ,
sondern der Compiler bzw. Assembler setzt einen einzigen konstanten Wert zusammen, während er das Quellprogramm analysiert.
Deshalb ist es auch ziemlich egal, wo im Programm solche Anweisungen stehen. Daraus resultieren ja keine Maschinenbefehle.

Die Addition anstelle von AND ist schlecht geeignet, weil dann Überträge zwischen den Bits auftreten können und etwas anderes entsteht als du annimmst.



_________________
Haftungsausschluß:



Bei obigem Beitrag handelt es sich um meine private Meinung.



Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.



Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !

[ Diese Nachricht wurde ge&auml;ndert von: perl am 10 Jul 2008 21:07 ]

[ Diese Nachricht wurde geändert von: perl am 10 Jul 2008 21:11 ]

BID = 533855

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Ne, mir ist das schon klar, ich bin Programmierer .

Sowas nennt man Maskierung und benötigt es oft, z.B. wenn man eine 8bit-Ganzzahl hat, in der man 8 voneinander unabhängige Informationen der Länge 1 Bit speichern möchte. Es eigent sich auch hervorragend zur Manipulation von IO-Ports etc.

Das ist alles, zumindest in diesem Fall, ja nur etwas für den Präprozessor, nachdem der drüber gelaufen ist, verschwindet es und es bleiben astreine Konstanten übrig.

Wusste halt nicht, wie diese Makros definiert waren und ging, weils quasi Standard ist, von Bitmasken aus, in der gesetzte Bits benutzt werden.

Auf das VerODERn bezog sich auch die Addition. Bei der VerUNDung kanns in die Hose gehen .

Edit:
Ich bezog mich auch auf mein Beispiel:
#define Einstellung1 1
#define Einstellung2 2
#define Einstellung3 4
#define Einstellung4 8

#define Einstellungen Einstellung1 | Einstellung2 | Einstellung4

Der |-Operator ist das bitweise ODER. Aber du weißt das sowieso .
Die Makros Einstellung1-4 haben halt an der Postion 0, 1, 2 und 3 das gesetzte Bit.





_________________


[ Diese Nachricht wurde geändert von: DonComi am 10 Jul 2008 22:10 ]


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 0 Beiträge verfasst
© x sparkkelsputz        Besucher : 182401112   Heute : 886    Gestern : 7426    Online : 331        26.11.2024    7:23
1 Besucher in den letzten 60 Sekunden        alle 60.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0493631362915