Forum: Mikrocontroller und Digitale Elektronik Input funktioniert nicht


von eXc (Gast)


Lesenswert?

Hi Leute, ich habe mein Tastaturproblem reduziert und NUR den INput
getestet. Leider funktioniert das irgentetwas nicht. Egal ob ich am
PortA ein H oder L anlege, PortB verändert sich nicht! Das Programm ist
eigentlich ziemlich simpel:

#include <16f628.h>
#include <inline.h>     // Der verwendete Prozessor


void main()
{
 TRISA=0b00001111;      //RA0-RA3 = Inputs
 TRISB=0b00000000;
 PORTB=0x00;

 while(1)       //Endlosschleife
 {
    PORTB = PORTA;
 }

}

Wo ist denn da der Fehler?? Ich versteh es einfach nicht!

Thx

von Bernd Schmidt (Gast)


Lesenswert?

Abfrage von Eingangsstaus ist PINx, nicht PORTx

 müsste also "PORTB = PINA;" oder so ähnlich sein (kenn C nicht
besonders)

Bernd

von eXc (Gast)


Lesenswert?

Hmm.. Ich habe gerade etwas über das CMCON gelesen. Leider bin ich echt
unerfahren mit uC's. Was steht das dirn in dem Register? Hab ich
vielleicht da etwas vergessen zu konfigurieren??

von Andreas Jäger (Gast)


Lesenswert?

Laut Doku (Page 31) muss in CMCON 0x07 geschrieben werden, damit die
PORTA Pins als I/O funktionieren (und nicht als Komparatoreingänge).

Ebenfalls solltest Du prüfen, ob Dein Compiler tatsächlich automatisch
die Registerbänke umschaltet. Sonst musst Du das vor jedem Setzen eines
Registers (TRISA, PORTA, CMCON...) von Hand erledigen.

Andreas

PS: Nicht immer neue Threads öffnen!

von eXc (Gast)


Lesenswert?

Danke!

CMCON 0x07 funzt! HURRA ;) Jetzt fehlt mir nur noch ein kleiner Tip wie
ich auf das interne ROM zugreiffen kann. Wie kann ich im ROM Variablen
ablegen bzw. lesen oder auch ab einer bestimmten Adresse XX bits
einlesen?!

von Andreas Jäger (Gast)


Lesenswert?

ROM??? (Read Only Memory = Nur Lese Speicher)

Daten kannst du im RAM ablegen (genauer: in den General Purpose
Registern), die Daten sind aber nach abschalten der Spannungversorgung
weg. Oder Du schreibst die Daten ins EEPROM, dann bleiben sie auch nach
Abschalten der Spannungversorgung erhalten.

Wie das alles geht, steht im Datasheet. Daher empfehle ich Dir: Lies'
das Datasheet ersteinmal komplett durch! Auch wenn's mühsam ist.
Kapitel die erstmal nicht in Frage kommen (z.B. USART) kanns Du ja
überspringen. Danach würde ich mir ein paar Beispielprogramme (z.B.
Application Notes von www.microchip.com) ansehen.

Ausserdem kannst Du im Programmspeicher Tabellen anlegen. Allerdings
nur beim Programmieren. Die werden dann mit dem Programm 'gebrannt'.
Sie Dir hierzu mal die Assemblerdirektive 'DT' im Assembler Users
Guide an.

Andreas

von Andreas Jäger (Gast)


Lesenswert?

...ich hab' ganz vergessen, dass Du ja in C programmierst:

 int tmpVar;
 tmpVar = 100;

und schon ist '100' im RAM gespeichert.

Andreas

von eXc (Gast)


Lesenswert?

Sorry, meinte auch das EEPROM. Habe es dank Datenblatt geschafft! Gibt
es irgentwo das Datenblatt vom 16F862 zu kaufen? ich habe keine Lust
mit 160 Seiten am Bildschrim anzugucken oder auszudrucken?!

von Andreas Jäger (Gast)


Lesenswert?

Ich habe früher einige Datasheets in Buchform von meinem damaligen
Distibutor Future Elektronics bekommen. Das funkioniert aber nur,
solange die davon ausgehen, dass irgendwann grössere Mengen
(>1000/Jahr) abgenommen werden.

Ich drucke die Sheets heute auch selbst aus. Dazu empfehle ich das
Druck-Tool FinePrint. Mit dem kann man mehrere Seiten auf einem A4
Blatt drucken. Ausserdem braucht man ja nur die Kapitel zu drucken, die
einen im Moment interessieren.

Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.