Καλησπέρα παιδιά,
Έχω έναν PIC16f887 με τον οποίο κάνω αποστολή ενώς αριθμού. Και μου εμφανίζει την εικόνα από το συνημένο αρχείο, τι κάνώ λάθος ξέρει κάποιο να με βοηθήσει;
Ευχαριστώ εκ των προτέρων
Printable View
Καλησπέρα παιδιά,
Έχω έναν PIC16f887 με τον οποίο κάνω αποστολή ενώς αριθμού. Και μου εμφανίζει την εικόνα από το συνημένο αρχείο, τι κάνώ λάθος ξέρει κάποιο να με βοηθήσει;
Ευχαριστώ εκ των προτέρων
Είναι δικό σου προγραμματιστικό πιθανά λάθος.
Τι λαθος θα μπορουσα δηλαδη σε ενα απλο;
while(1){
TXREG=1;
}
Καθώς έχω ρυθμίσει το baund rate σωστα.
Δεν γνωρίζω από PIC καθόλου οπότε δεν μπορώ να σε βοηθήσω. Απλά θα σου έλεγα να δοκιμάσεις και το πρόγραμμα το MobaXterm που είναι κλάσεις ανώτερο από το putty. Σε arduino που το δουλεύω είναι φοβερό. Δεν λέω ότι το πρόβλημα είναι στο Putty , δεν το ξέρω
Πως έστειλες χαρακτήρα; (που είναι ο κώδικας που έγραψες; ). Τι αποτέλεσμα έβγαλε;
Το 0x18 δεν είναι εκτυπώσιμο.
Δοκίμασε αυτό.
Αν δεν δουλέψει, ανέβασε κώδικα και φωτογραφία της πλακέτας/ράστερ καθώς και το τι δείχνει το putty
Κώδικας:{
unsigned char x = 'A';
while(1){
TXREG = x;
if(++x > 'Z')
x = 'A';
while(PIR1bits.TXIF == 0)
;
}
}
Παράθεση:
Once the
TXREG register transfers the data to the TSR register
(occurs in one TCY), the TXREG register is empty and
flag bit TXIF (PIR1<4>) is set.
δοκιμασα αυτο που μου έστηλες αλλά και πάλι τίποτα
ο κωδικα είναι :
#define _XTAL_FREQ 8000000
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
//CONFIG1
#pragma config FOSC=INTRC_CLKOUT
#pragma config WDTE=OFF
#pragma config PWRTE=OFF
#pragma config MCLRE=ON
#pragma config CP=OFF
#pragma config CPD=OFF
#pragma config BOREN=OFF
#pragma config IESO=OFF
#pragma config FCMEN=OFF
#pragma config LVP=OFF
//CONFIG2
#pragma config BOR4V=BOR40V
#pragma config WRT=OFF
main(){
char k;
int a;
a=0x77;
unsigned char x = 'A';
//TXSTA Register Config
TXSTAbits.CSRC=1;// (Don?t care) Master mode (clock generated internally from BRG)
TXSTAbits.TX9=0; //Selects 9-bit transmission
TXSTAbits.TXEN=1; //Transmit enabled
TXSTAbits.SYNC=0; //Asynchronous mode , baud rate
TXSTAbits.SENDB=1; //Send Sync Break on next transmission (cleared by hardware upon completion)
TXSTAbits.BRGH=0;//baund rate
TXSTAbits.TRMT=1;// Transmit Shift Register Status bit (TSR empty)
TXSTAbits.TX9=0; //Selects 9-bit transmission
RCSTAbits.SPEN=1; //Serial port enabled
//BAUDCON Register Config
BAUDCTLbits.RCIDL=0;// Start bit has been received and the receiver is receiving
BAUDCTLbits.BRG16=0;//8-bit Baud Rate Generator is used
BAUDCTLbits.WUE=0;//Receiver is operating normally
BAUDCTLbits.ABDEN=0;//Auto-Baud Detect mode is disabled
SPBRGH=0;
SPBRG=12;//SPBRG baud rate
PIE1bits.TXIE=0;
INTCONbits.GIE=0;
INTCONbits.PEIE=0;
while(1){
TXREG = x;
if(++x > 'Z')
x = 'A';
while(PIR1bits.TXIF == 0)
;
}
και στο Putty βλέπω το συνυμένο που σου ανεβάζωΣυνημμένο Αρχείο 56952
Πρόβλημα 1:
Το IRCF<2:0> δεν βλέπω να το έχεις πειράξει ώστε να διαλέξεις 8ΜΗz ταχύτητα.
Το ότι έβαλες ένα define για τα 8MHz δεν αναγκάζει τον μΕ να ακολουθήσει κάποια συγκεκριμένη συχνότητα.
από το pdf βλέπω ότι default συχνότητα είναι τα 4ΜΗz.
Πρόβλημα 2:Παράθεση:
4.5.4 FREQUENCY SELECT BITS (IRCF)
The output of the 8 MHz HFINTOSC and 31 kHz
LFINTOSC connects to a postscaler and multiplexer
(see Figure 4-1). The Internal Oscillator Frequency
Select bits IRCF<2:0> of the OSCCON register select
the frequency output of the internal oscillators. One of
eight frequencies can be selected via software:
• 8 MHz
• 4 MHz (Default after Reset)
• 2 MHz
• 1 MHz
• 500 kHz
• 250 kHz
• 125 kHz
• 31 kHz (LFINTOSC)
Να ξέρεις ότι οι συχνότητες που παράγει ο εσωτερικός ταλαντωτής δεν είναι ικανοποιητικά σταθερές και ενδέχεται να εμφανίζονται σφάλματα στη σειριακή επικοινωνία (μπορούν να παρατηρηθούν οι τιμές των FERR και OERR κατα την λήψη). Όμως εσύ έχει σοβαρό πρόβλημα συγχρονισμού λόγω λαθών στο βασικό ρολόι του μΕ και ίσως και στις ρυθμίσεις της σειριακής.
Παράθεση:
12.2 Clock Accuracy with
Asynchronous Operation
The factory calibrates the Internal Oscillator block output
(INTOSC). However, the INTOSC frequency may
drift as VDD or temperature changes, and this directly
affects the asynchronous baud rate. Two methods may
be used to adjust the baud rate clock, but both require
a reference clock source of some kind.
(εδώ ταιριάζει το RTFM :biggrin:)
Με τις ρυθμίσεις της σειριακής που έχεις κάνει, δεν ασχολήθηκα.