# Συζήτηση Κυκλωμάτων > Ψηφιακά Κυκλώματα > Μικροελεγκτές >  >  pic16f84a clock alarm

## billtech

γεια σας παιδια...
θελω να κατασκευασω ενα ρολοι με τον pic16f84a με alarm πανω...
πως ειναι καλυτερα να το κανω?με ds1307/ds1302? η με προγραμματισμο μεσα στον επεξεργαστη?
πως να κανω το κωδικα?δεν ειμαι και τοσο σχετικος.με Microbasic εννοω.
θα ηθελα τη βοηθεια σας.
σας ευχαριστω.

----------


## xampos

υπαρχουν ολοκληρωμενα που ειναι ετοιμα για αυτη τη δουλεια ωστε να μην μπλεξεις με προγραμματισμο και πανω κατω θελουν τα ιδια εξαρτηματα

----------


## Lykos1986

Θα συμφωνήσω! Στον PIC θα πρέπει να γράψεις σε assembly για να έχεις 100% ακρίβεια η οποία όμως θα παίζει ανάλογα με τον εξωτερικό κρύσταλο και την ποιότητα του (δεν μιλάω καν για εσωτερικό που αν τον χρησιμοποιήσεις μάλλον κάποια στιγμή δεν θα πας στην δουλειά!). Επίσης οι καιρικές συνθήκες και το πόσο "παιζει" η τάση τροφοδοσίας σου επιρεάζουν το clock το μC.


Όσο για το DS1302... δεν έχω καλά λόγια! Δεν με έχει αφήσει ικανοποιημένο με την ακρίβεια του! Φυσικά θέλει ένα τυποποιημένο PCB γύρο του για να μην επιρεάζετε, αλλά και πάλι δεν ειναι και ότι πιο ακριβές στης αγορά! Η maxim έχει μακράν καλύτερα RTC από ότι το DS1302. Η επιλογή όμως είναι δική σου...

----------


## kopla

- Ενα "καλό" ( όπως το πάρει κανείς ) RTC είναι το DS1307+

- Υπάρχουν μΕς που έχουν ενσωματωμένο RTCC (real time clock calendar). Είναι καποιοι 16μπιτοι και οι 32μπιτοι (νομίζω)... 

- Μπορείς να δοκιμάσεις να γράψεις κώδικα για να το υλοποιήσεις. Αλλά θα πρέπει να το κάνεις με ..assembly.

Your choice!

----------


## DT200

δεν ξέρω αν ο 16F84 είναι η καλύτερη επιλογή, εγώ θα πήγαινα στον 16F628 που έχει 2Κ μνήμη και 16bit timer 
(• Timer1: 16-bit timer/counter with *external crystal*/clock capability) 
και όσο για το θέμα τής ακρίβειας του χρόνου θα πω ότι δεν υπάρχει θέμα 
και μάλιστα εγώ έχω φτιάξει ένα χρονόμετρο με ακρίβεια 1/100 του δευτερολέπτου. (όσοι έχετε έρθει στην συνάντηση στο Θησείο το έχει δει.)
φυσικά δουλεύει με interrupt.

----------


## billtech

κοιταχτε παιδια...θελω να κανω ενα ρολοι που να εμφανιζει στη οθονη lcd την ωρα.και να μπορω να την ρυθμησω με ενα κουμπακια.επισης να μπορω να βαζω ενα αλαρμ με τη δυνατοτητα να βαζω ποτε θα ξεκιναει και ποτε θα σταματαει...
εχω στη διαθεση μου η pic16f84a η pic16f88.
τι να κανω?

----------


## billtech

μπα ε?μαλλον θα ξαναπαω στους 8051.με assmbly νομιζω τα κανουν ολα.δεν ξερω αλλα αυτοι οι pic ακουω τοσα για αυτους και εχει ενα σωρο.πρεπει καθε φορα να διαλεγω ποιον να βαλω.

----------


## kopla

> μπα ε?μαλλον θα ξαναπαω στους 8051.με assmbly νομιζω τα κανουν ολα.δεν ξερω αλλα αυτοι οι pic ακουω τοσα για αυτους και εχει ενα σωρο.πρεπει καθε φορα να διαλεγω ποιον να βαλω.



Κοίτα, υπάρχουν PIC για γενική χρήση. Αυτοί σου παρέχουν πολλάααα περιφερειακά. Αλλοι πιο ειδικευμένοι, σου παρέχουν (επιπλέον) παραπάνω πχ PWM κανάλια ή USB ή ...
Μην ξεχνας ότι μιλάμε για 8bit / <14bit core. Baseline & Midrange δηλαδή. Παρόλα αυτά είναι πολύ καλοί.

Αν είσαι πιο ανετος με 8051... τότε πήρες τη μισή απάντηση. Το αλλο μισό είναι ο τρόπος (βλ. τις 3 επιλογές που σου ειπα πριν). Βεβαίως η μια απορρίπτεται γιατι ο 8051 δεν έχει ενσωματομένο RTC(C). Ή μηπως έχει? LOL

----------


## billtech

δεν ειπα εχει αλλα με εκεινο μπορω να το κανω τουλαχιστον...με τους πικ δεν εχω καλη σχεση γτ τωρα προσπαθησα να τους μαθω.θα δω.

----------


## billtech

να μαι πλι παιδια...βρηκα και κοιταξα ξανα τις οδηγιες του ρολογιου/relay control.
λεει:εχω στη διαθεση μου Pic16f84a η pic16f88 και πρεπει να κανω ενα ρολοι που να εμφανιζετε στη οθονη.με τρια πληκτρα πρεπει να ρυθμιζω ωρα,λεπτα,μηδενιζω δευτερολεπτα.και ενα αλλο να κανω σετ.τωρα το αλλο κομματι ειναι να εχω και ΔΥΟ alarm.δηλαδη.να ρυθμιζω  με τα κουμπια τα προηγουμενα δυο ωρες εναρξης και 2 ωρες ληξης του alarm.βασικα να ελεγχει 2 relay.
ξερω παιδια οτι ειναι δυσκολο...αλλα για μενα ειναι το εβερστ.δεν ξερω πως να το κανω με ενα απο αυτους τους 2 μονο!!!
οποιος μπορει και θελει να βοηθεισει ας ειναι καλα...οπως ολοι.

----------


## hardcode

Μπορείς να πάρεις ενα απλό ψηφιακό ρολόι απο κινέζο με 5 ευρώ και έχεις λύσει όλα τα προβλήματά σου.

----------


## billtech

> Μπορείς να πάρεις ενα απλό ψηφιακό ρολόι απο κινέζο με 5 ευρώ και έχεις λύσει όλα τα προβλήματά σου.




δηλαδη φιλε μου?τι εννοεις?πως γινεται αυτο?
εγω μιλω οτι θα ελεγχει 2 relay ισως και 3 αν ειναι δυνατον.παει συναιχεια σε ενα αλλο κυκλωμα που τελειωσα...και πρεπει να εχει και αυτο...να δειχνει ωρα και να κανει και τις λειτουργιες των relay.να τα ελεγχει δηλαδη.
δεν ξερω...ελπιζω να γινεται..στιριξα πολλα πανω σε αυτη τη λειτουργια.

----------


## billtech

κανεις ρε παιδια?ενας ενας...

----------


## DT200

γεια σου φίλε billtech και συγνώμη για την μεγάλη μου απουσία από το φόρουμ.
την κατασκευή σου θα την κάνεις με τον 16F88 και θα σε βοηθήσω πολύ, 
μου αρέσει που έχεις πέσει στα βαθιά και έχεις πολλή όρεξη για μάθηση.

Άρα 

1ον θα βρεις ένα κρύσταλλο από ρολόι (με συχνότητα 32.768 kHz)
2ον θα πάρεις μία οθόνη LCD με πρωτόκολλο HD44780
3ον από τα παραδείγματα της MikroBasic θα μάθεις να γράφεις στην οθόνη

αφού τα κάνεις όλα αυτά, θα σε μάθω να χρησιμοποιής τις διακοπές του Pic 
και θα φτιάξουμε ένα χρονόμετρο, μετά θα σε βοηθήσω να γράψεις 
τον κώδικα για το ρολόι και αργότερα τα Alarm με τα relay

περιμένω νέα σου .

Υ.Γ. δεν ξέρω γιατί δεν λαμβάνω e-mail για νέα μηνύματα του φόρουμ.

----------


## billtech

λοιπον φιλε μου...
1.παρειγγειλα σημερα το κρυσταλλο..
2.αν εννοεις μεσα απο το προγραμμα που εχει η microbasic τα παραδειγματα θα τα δω αν και τα ειδα αλλα και λιγακι ηδη...θα το ξαναδω.
3.SEIKO L1672 (2 lines x 16 chars) μας κανει σωστα?

----------


## billtech

να ρωτησω κατι ακομα....
RB6 --> ειναι εισοδος  χρονισμου
RB7--> ειναι εισοδος/εξοδος δεδομενων
MCLR ->Κατασταση προγραμματισμου(13V)
Vdd-->+5v
Vss-->0V γειωση

στον 16F88 ειναι τα ιδια ποδαρακια?που ειναι για προγραμματισμο?δηλαδη ειναι ο ιδιος προγραμματιστης...με τον 16F84A?

ευχαριστω.

----------


## savnik

> να ρωτησω κατι ακομα....
> RB6 --> ειναι εισοδος χρονισμου
> RB7--> ειναι εισοδος/εξοδος δεδομενων
> MCLR ->Κατασταση προγραμματισμου(13V)
> Vdd-->+5v
> Vss-->0V γειωση
> 
> στον 16F88 ειναι τα ιδια ποδαρακια?που ειναι για προγραμματισμο?δηλαδη ειναι ο ιδιος προγραμματιστης...με τον 16F84A?
> 
> ευχαριστω.



Ναι τα ιδια

----------


## billtech

> γεια σου φίλε billtech και συγνώμη για την μεγάλη μου απουσία από το φόρουμ.
> την κατασκευή σου θα την κάνεις με τον 16F88 και θα σε βοηθήσω πολύ, 
> μου αρέσει που έχεις πέσει στα βαθιά και έχεις πολλή όρεξη για μάθηση.
> 
> Άρα 
> 
> 1ον θα βρεις ένα κρύσταλλο από ρολόι (με συχνότητα 32.768 kHz)
> 2ον θα πάρεις μία οθόνη LCD με πρωτόκολλο HD44780
> 3ον από τα παραδείγματα της MikroBasic θα μάθεις να γράφεις στην οθόνη
> ...




γεια σου φιλε μου....
1.λοιπον οπως σου ειπα παρειγγειλα τον κρυσταλλο.
2.εχω ηδη οθονη LCD με πρωτόκολλο HD44780
3.διαβασα τα παραδειγματα της Microbasic και τωρα ειμαι ετοιμος να γραψω σε lcd αν μου λυσεις ενα προβληματακι( ακομα).

το προβλημα:
μεσα στα παραδειγματα ειδα να λεει παντου για αρχηκοποιηση της LCD την παρακατω εντολη:
*LCD_Config(PortB,3,2,1,0,PortB,4,7,5)
*προφανως το *PortB,3,2,1,0* ειναι τα ποδαρακια του επεξεργαστη που στελνουν τα δεδομενα στο LCD.
και συνεπως τα ποδαρακια *PortB,4,7,5* ειναι αυτα που εχουν τα σηματα ελεγχου.το προβλημα μου ειναι ποιο απο αυτα ειναι πιο.δηλαδη αν το κανω οπως το καταλαβα το ποδαρακι *4=EN το 7=R/w και το 5=RS*.
ειναι ετσι?η ειναι αλλιως και κανω καμια ζημια στο LCD?

----------


## DT200

Μπράβο φίλε μου ! χαίρομαι να μαθαίνω νέα σου.

αυτό που πρέπει να ξέρεις είναι ότι δεν μπορείς να κάνεις καμία
ζημιά στην οθόνη , ότι και αν κάνεις, με μόνο περιορισμό τα πιν τροφοδοσίας.

*για αρχή θα πρέπει να εγκαταστήσεις την τελευταία έκδοση της MB
για να έχουμε αντιστοιχία.
*
με την εντολή  Lcd_Config(PORTD,3,2,1,0,PORTB,2,3,4) είμαι σίγουρος 
ότι έχεις καταλάβει ότι αυτή η εντολή, θέλεις τα Data για την LCD να είναι στην πόρτα D και 
μάλιστα στα πιν του μ/ε 3,2,1,0 τα οποία αντιστοιχούν στα πιν της LCD 
Data 7,6,5,4 (δώσε προσοχή στην εικόνα του παραδείγματος στην ΜΒ) και στην πόρτα Β του
μ/ε τα πιν 2,3,4, να αντιστοιχούν στα πιν
της LCD  RS, RW, E.
βέβαια εσύ μπορείς να αλλάξεις την εντολή και να βάλεις μία άλλη πόρτα και άλλα πιν.

----------


## billtech

> Μπράβο φίλε μου ! χαίρομαι να μαθαίνω νέα σου.
> 
> αυτό που πρέπει να ξέρεις είναι ότι δεν μπορείς να κάνεις καμία
> ζημιά στην οθόνη , ότι και αν κάνεις, με μόνο περιορισμό τα πιν τροφοδοσίας.
> 
> *για αρχή θα πρέπει να εγκαταστήσεις την τελευταία έκδοση της MB
> για να έχουμε αντιστοιχία.
> *
> με την εντολή  Lcd_Config(PORTD,3,2,1,0,PORTB,2,3,4) είμαι σίγουρος 
> ...



γεια σου φιλε μου...
εσυ πιο version εχεις?και απο που το βρηκες?εγω εχω το 7.0.0.2.

τωρα με αυτο που εγραψες με μπερδεψες λιγακι.
καταλαβα οτι τα 4 πρωτα ειναι τα data και τα αλλα 3 ειναι οι εντολες.τωρα ομως...
αυτα τα 4 των δεδομενων μπορω να τα συνδεσω σε 4 οποιαθελω εγω απο αυτα της lcd φτανει να ειναι απο τα 1-8?
και τα αλλα 3 τοων εντολων.οταν τα βαζω μεσα στι εντολη 
Lcd_Config(PORTD,3,2,1,0,PORTB,2,3,4) τωρα οπως ειναι το πρωτο ειναι το RS,RW,EN? η πανε με αλλη σειρα?που ειναι η εικονα του παραδειγματος που λες?

----------


## DT200

> εσυ πιο version εχεις?και απο που το βρηκες?εγω εχω το 7.0.0.2.



και εγώ αυτή έχω.





> τωρα με αυτο που εγραψες με μπερδεψες λιγακι.
> καταλαβα οτι τα 4 πρωτα ειναι τα data και τα αλλα 3 ειναι οι εντολες.



σωστό αυτό .






> τωρα ομως...
> αυτα τα 4 των δεδομενων μπορω να τα συνδεσω σε 4 οποιαθελω εγω απο αυτα της lcd φτανει να ειναι απο τα 1-8?



όχι θα τα βάλεις στα πιν 7,6,5,4 της LCD




> και τα αλλα 3 των εντολων.



στα pin των εντολών της LCD




> Lcd_Config(PORTD,3,2,1,0,PORTB,2,3,4) τωρα οπως ειναι το πρωτο ειναι το RS,RW,EN? η πανε με αλλη σειρα?



έτσι είναι σωστά.




> που ειναι η εικονα του παραδειγματος που λες?



την εικόνα που σου είπα θα την βρεις  στο 
Help => mikroBasic libraries => LCD(4-bit interface)
κάτω κάτω.

και πάνω στην πρώτη εντολή έχει και αυτό Lcd_Config(PORTD,3,2,1,0,PORTB,2,3,4)

----------


## billtech

φιλε μου σε ευχαριστω καταρχας για την γρηγορη απαντηση σου...
αν καταλαβα καλα δηλαδη εχουμε:
lcd_config(portb,3*(lcd_pin_7)*,2*(lcd_pin_6)*,1*(lcd_pin_5)*,0*(lcd_pin_4)*,portb,4*(lcd_pin_RS)*,5*(lcd_pin_Rw)*,6*(lcd_pin_EN)*)

εσυ το εχεις ολο το προγραμμα η αυτο που δινει η εταιρια?γτ εμενα δεν εχει αυτο που λες με το Help => mikroBasic libraries => LCD(4-bit interface) η δεν το βρηκα εγω.

σε ευχαριστω πολυ φιλε μου

----------


## DT200

έλα ρε συ , όλοι το ίδιο πρόγραμμα έχουμε , κοίτα εδώ...

----------


## billtech

oups sorry...νομιζα οταν ειπες help οτι εννοουσες τη καρτελα help...λαθος μου.

το κοιταξα αυτο που λες.ακου τωρα να καταλαβεις γτ σου ειπα οτι τα ποδαρακια 0-3 του RB λεω οτι πρεπει να πανε στα 0-3 της lcd.εμενα η Lcd μου ειναι 1-8 τα data και οχι 7-14 που εχει στο παραδειγμα.

και κατι αλλο...γτ στα ποδαρακια ελεγχου ειναι 2 και οχι 3 οπως ειναι στο κωδικα?

αποψε θα κανω ενα πειραμα να γραψω κατι στο lcd....αν τα καταφερω.

----------


## DT200

στην πραγματικότητα δεν παίζει ρόλο ποια είναι η αρίθμηση που 
κάνει ο κάθε κατασκευαστής , αλλά το όνομα του κάθε πιν,
δηλαδή, το PortD.0  θέλω να πάει στο Data.4  της Lcd .
δεν με νοιάζει ποιο αριθμό πιν έχει αλλά ποια είναι η λειτουργία του.

τα πιν ελέγχου είναι στην πράξη 2 διότι το ένα από τα τρία είναι το R/ 'W 
που σημαίνει ότι όταν αυτό το πιν έχει 1 τότε μπορείς να διαβάσεις δεδομένα από την LCD 
και όταν είναι 0 τότε την γράφεις .
το αποτέλεσμα είναι να γειώνουμε το  R/ 'W και να γλιτώνουμε το ένα πιν του μ/ε,
αλώστε δεν χρειάζεται να κάνουμε ανάγνωση από την LCD ποτέ.

----------


## billtech

οκ φιλε μου..σε ευχαριστω..θα σου πω νεα συντομα..

----------


## billtech

φιλε μου τιποτα...δεν ξερω τι εκανα λαθος...πιο κατω ειναι ο κωδικας ποε εκανα:
program ledss

dim text as string[16]

main:
text = "mikroElektronika"

     Lcd_Config(PORTB,3,2,1,0,PORTB,7,6,5) ' Lcd_Init_EP5, see Autocomplete
     LCD_Cmd(LCD_CLEAR)                    ' Clear display
     LCD_Cmd(LCD_CURSOR_OFF)               ' Turn cursor off
     LCD_Out(1,1, text)                    ' Print text to LCD, 1st row, 1st column
     Delay_ms(1000)
     LCD_Out(2,4,"mikroBasic")                 ' Print text to LCD, 2nd row, 6th column

end.

και

program ledss

dim text as char[20]

main:
     TRISB = 0                   ' PORTB is output
     Lcd_Config(PORTB,3,2,1,0,PORTB,7,6,5) ' Lcd_Init_EP5, see Autocomplete
     LCD_Cmd(LCD_CLEAR)                    ' Clear display
     LCD_Cmd(Lcd_Blink_Cursor_On)               ' Turn cursor off
     text = "mikroElektronika"
     LCD_Out(1,1, text)                    ' Print text to LCD, 1st row, 1st column

end.

οπου το 
0=LCD_4
1=LCD_5
2=LCD_6
3=LCD_7

7=LCD_Rs
6=LCD_Rw
5=LCD_EN

με κρυσταλλο 4M και ταση και στο επεξεργαστη και στο LCD ιση με 5V.
που ειναι το λαθος?

----------


## savnik

> φιλε μου τιποτα...δεν ξερω τι εκανα λαθος...πιο κατω ειναι ο κωδικας ποε εκανα:
> program ledss
> 
> dim text as string[16]
> 
> main:
> text = "mikroElektronika"
> 
> Lcd_Config(PORTB,3,2,1,0,PORTB,7,6,5) ' Lcd_Init_EP5, see Autocomplete
> ...



Αν και δεν ασχολουμε με την microbasic, δεν βλεπω μεσα στο προγραμμα σου εντολη για το ποδι R/W της οθονης, εκτος αν το εχεις γειωσει.
Το τριμμερ για το contrast το γυρισες στη θεση που πρεπει;

----------


## billtech

ναι γαι το contrast το γυρισα.και εκεινη την ωρα το επαιζα για να δω οτι ειναι σιγουρα ενταξει.και αν πηγαινε στο ελαχιστο νομιζω εμφανιζε τα τετραγωνακια που βγαζουν.
τι φταει ρε γμτ...ολη νυχτα αυτο παλευα.

----------


## DT200

το πρώτο πρόγραμμα θα έπρεπε να δουλεύει κανονικά.
αυτό που θα έκανα εγώ είναι:

1ον έχει το MCLR 5V ?

2ον θα έγραφα ένα πρόγραμμα το οποίο να κάνει το PortB.4 μία on και μία off 
κάθε 2 δευτερόλεπτα για να επιβεβαιώσω ότι ο μ/ε τρέχει .
(κατά πάσα πιθανότητα έχεις κάνει κάποιο λάθος στις σημαίες)

3ον επιβεβαίωσε με ένα πολύμετρο ότι έχεις σωστή ένωση από τον μ/ε μέχρι την LCD.

σου επισυνάπτω ένα πρόγραμμα που πρέπει να δουλεύει (δεν έχω 16F88 )

----------


## billtech

φιλε μου γεια σου...
δοκιμασα ενα αλλο προγραμμα  και το φορτωσα με led που αμα πατησεις ενα κουμπι ξεκινουν να αναβοσβηνουν για 30 φορες και δουλευει....δεν ξερω τι φταιει...για lcd εχω της seiko την L1672.
μετα εφαιρεσα την εντολη που βαζει τιμη στο κρυσταλλο και συνδεσα εξωτερικα κρυσταλλο..αλλα παλι τπτ.

----------


## DT200

θέλω να κάνεις το εξής,
προγραμμάτισε τον μ/ε με το πρόγραμμα που δουλεύουν τα Led 
και αφού δουλέψεις τότε χωρείς να κάνεις τίποτα άλλο 
σβήσε τις εντολές από το project  για τα Led και βάλε αυτές 

Dim text as string[16]

main:
TRISB=0
     Lcd_Config(PORTB,3,2,1,0,PORTB,7,6,5) 
LCD_Cmd(LCD_CURSOR_OFF) 

ARXH:
     LCD_Cmd(LCD_CLEAR)                    
     LCD_Out(1,1,"TEST")
     Delay_ms(1000)
     LCD_Out(2,4,"mikroBasic")
PORTB.4=1
Delay_ms(2000)
PORTB.4=0
Delay_ms(2000)
GOTO ARXH
end. 

ένωσε την οθόνη κανονικά και ένα Led το PortB.4
άρα αν τώρα ο μ/ε εργάζεται σωστά τότε τουλάχιστον θα αναβοσβήνει το Led , 
για την LCD βλέπουμε.

----------


## billtech

ΟΚ θα το κανω σε λιγο και θα σου πω...ισως αποψε καλυτερα...

----------


## DT200

όταν δώσεις τάση στην οθόνη θα πρέπει σε όλα τα πιν δεδομένων
και εντολών να έχουν 5V (μόνο τάση χωρίς τον μ/ε)
και προσοχή το R/ 'W να είναι στο (-) όχι στο (+) ή στον αέρα.

----------


## briko

Το καλύτερο που έχεις να κάνεις για να βρεις μια λύση και να μάθεις microbasic είναι να αγοράσεις το easypic 
Μετά όλα θα σου φαίνονται παιχνιδακι

----------


## billtech

φιλε μου εβαλα στη ταση το lcd και ειχα γειωση το rw και το 13. το 14 το ειχα στη ταση και το 12 στο μεσαιο ποδαρακι του ποτενσιομετρου.
μονο το 9 πιν δηλαδη το enable δεν εχει 5V.τα υπολοιπα ειναι ολα καλα...

----------


## billtech

οκ φιλε dt200 εκανα αυτο το προγραμμα που με εστειλες...η led ολα καλα...η lcd ομως δεν παιζει παλι.δεν ξερω.

----------


## DT200

αν είσαι σίγουρος ότι οι συνδέσεις σου είναι σωστές και
σε όλα τα πίν Data και το πιν RS έχουν 5V τότε βάλε μία αντίσταση 
περίπου 10Κ στο (+) και στο Ε και πρέπει να παίξει.
(δείξε μου το σχηματικό σου)

αν δεν γίνει τίποτα τότε γράψε αυτό το πρόγραμμα και μέτρα με το 
πολύμετρο ότι όλα τα πιν της πόρτας Β κάνουν On και Off (με την LCD πάνω) .

αν κάποιο πιν δεν παίζει τότε χρειάζεται επιπλέω αρχικοποίηση διότι οι 
δευτερεύων λειτουργίες κάποιου πιν, είναι προεπιλεγμένες 
και για αυτό δεν υπακούν στο πρόγραμμα σωστά.  

*program billtech

main:
  TRISB=0
  Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 7, 6, 5)
  Lcd_Cmd(LCD_CLEAR)
  Lcd_Cmd(LCD_CURSOR_OFF)
  lcd_out(1,1,"billtech")
ARXH:
  PORTB=0
  DELAY_MS(2000)
  PORTB=255
  DELAY_MS(2000)
  GOTO ARXH
  end.*

----------


## billtech

φιλε μου τιποτα....εδω σου βαζω το σχηματικο μου...
δες το..ειναι στο χερι γτ ειναι σε διαρτιτη κολλημενα και ελεγμενα καλα...λαθη δεν εχει η διατριτη..μονο στο σχηματικο αν παιζει κατι λαθος...
δες το και εσυ

http://img225.imageshack.us/my.php?i...02233hhmf4.jpg

το προγραμμα που μου εδωσες τωρα το εβαλα και μου βγαζει 5v σε ολα και 0.μονο στα 2 πρωτα τω τατα αμα τα εχω συνδεδεμενα παει στο 4,κατι.
δεν μπορω να καταλαβω

ερωτηση: γιατι βαζουμε 3 ποδαρακια στο κομματι της εντολης με τα σηματα ελεγχου αφου τα 2 εχουμε συνδεδεμενα με τον  PIC?
αφου το τριτο της οθονης(RW) παει στη γη ετσι και αλλιως?

----------


## DT200

Αν το σχηματικό σου είναι όπως και το PCB σου, τότε, έκανες ένα
λάθος το οποίο στο επισήμανα τουλάχιστον δύο φορές 
και σου το έδειξα και με φωτογραφία από την ΜΒ





> μάλιστα στα πιν του μ/ε *3,2,1,0* τα οποία αντιστοιχούν στα πιν της LCD 
> *Data 7,6,5,4* (δώσε προσοχή στην εικόνα του παραδείγματος στην ΜΒ)



το πρόβλημα σου είναι ότι δεν έχεις συνδέσει τον μ/ε με τα σωστά Data.
εσύ θέλεις ,
το πιν του μ/ε RB3 με το Data 7 δηλαδή το πιν 1 και όχι με το 8 !
είναι όλα λάθος άλλαξε τα.

----------


## billtech

δεν παιζει δυστιχως....εκει τα ειχα πριν..αυτο ειναι που σου εστειλα το καινουριο με τις αλλαγες...εκεινα ηταν τα πρωτα που ειχα κανει οταν το πρωτοεκανα...και μετα που δεν δουλευε τα αλλαξα παλι..


και τωρα που μου το ειπες παλι τα εβαλα...αλλα δυστιχως...

----------


## savnik

Δες την εικονα.

----------


## savnik

Δες και αυτη.
Το pin1 ειναι οπως βλεπεις την οθονη το πρωτο αριστερα.

----------


## billtech

http://img517.imageshack.us/my.php?i...8986224nj5.jpg

http://www.mp3player.s5.com/docs/L1672.pdf

αυτο το κυκλωμα εκανα τελικα οπως ειπε ο φιλος DT200 και αυτη την lcd εχω.δοκιμασα το προγραμμα που μου ειπε και παλι τπτ.

με 10Κ ποτενσιομετρο και 4Μ κρυσταλλο.

----------


## DT200

εσύ θα με τρελάνεις ...!
δεν σε θέλει καθόλου !

έκανες το τελευταίο πρόγραμμα που σου έγραψα ?
το οποίο θα έκανε όλα τα πιν On Off κάθε δύο δευτερόλεπτα.
πρέπει να ξέρω αν δούλεψε , από αυτό εξαρτώνται πολλά !!!

Υ.Γ. το δεύτερο λινκ δεν δουλεύει.

----------


## billtech

το εκανα...η led αναβοσβηνει κανονικα.....καθε 2 δευτερα..
εμενα μου δουλευει το link.ειναι το Pinout της L1672 seiko.της lcd μου δηλαδη.

----------


## DT200

βιάζεσαι όταν γράφεις και δεν δίνεις ολοκληρωμένες απαντήσεις. 

Μέτρησες με το πολύμετρο όλη την πόρτα Β ότι κάνει On Off.

----------


## billtech

εννοειτε μωρε....ολα ενα ενα...και πανω στα ακρα του επεξεργαστη και πανω στα ακρα τα αντοιστιχα ποθ καταληγουν στο lcd.

----------


## DT200

κάνε μία τελευταία δοκιμή με αυτό και αν δεν γίνει τίποτα 
κάνε το επόμενο που γράφω ποιο κάτω.
*Προσοχή στο κοντραστ της LCD*

program billtech

main:
  TRISB=0
  Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 7, 6, 5)
  Lcd_Cmd(LCD_CLEAR)
  Lcd_Cmd(LCD_CURSOR_OFF)
  lcd_out(1,1,"billtech")
  DELAY_MS(5000)

ARXH:
  PORTB=0
  DELAY_MS(2000)
  PORTB=255
  DELAY_MS(2000)
  GOTO ARXH
  end.

βήμα 2ο
θα αλλάξουμε επεξεργαστή και θα πάμε στον 16F84, που 
τον έχω και εγώ για να σου γράψω ένα δοκιμασμένο πρόγραμμα 
το οποίο δεν θα αφήνει περιθώρια λάθους . 

είναι το ίδιο ακριβός αλλά εμένα μου δουλεύει 
*προσοχή έχω αλλάξει τα πιν ενολών* .

program billtech

main:
  TRISB=0
*Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 4, 6, 5)*
  Lcd_Cmd(LCD_CLEAR)
  Lcd_Cmd(LCD_CURSOR_OFF)
  lcd_out(1,1,"billtech")
  DELAY_MS(5000)

ARXH:
  PORTB=0
  DELAY_MS(2000)
  PORTB=255
  DELAY_MS(2000)
  GOTO ARXH
  end.

----------


## billtech

οκ θα το περασω.να κανω μια διευκρινηση.
στειλε μου την παρακατω εντολη αλλα μεσα αντικατεστεισε τα ποδαρακια με αυτα της LCD.

*Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 4, 6, 5)
*   Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 7, 6, 5)

για να σιγουρευτουμε οτι δεν κανω εκι το θαθος.στη συνδεση των καλωδιων.

σε ευχαριστω πολυ φιλε μου...και εμενα με τρελλενει ολο αυτο...τι να κανω ομως?υπομονη... :Smile: 

O PIC16F84A ΔΟΥΛΕΥΕΙ ΤΟ ΑΤΙΜΟ!!!!!!!!!!!!

και ο 88 δουλεψε τωρα...αφησα το κωδικα ιδιο με αυτο του 84Α αλλα αλλαξα τα χαρακτηριστικα που δινουμε οταν κανουμε νεο project.και δουλεψε...ΕΠΙΤΕΛΟΥΣ φιλε μου επιτελους!!!!

----------


## DT200

OK , αυτό είναι το νέο πρόγραμμα για 16F84*A
*και με τα πιν Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 7, 6, 5)
καλή τύχη !!!

----------


## billtech

γεια σου φιλε μου...
λοιπον..
εκανα το ιδιο προγραμμα που καναμε πριν και στον 84Α και στον 88 με το 
Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 4, 6, 5)
εκανα το
Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 7, 6, 5) στον 84Α και δουλεψε...
αποτελεσμα ολου αυτου να καταλαβουμε οτι το γ@μημ3νο το 88 με το 
Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 7, 6, 5)
αυτο μας ειχε σπασει τα νευρα....

----------


## savnik

> γεια σου φιλε μου...
> λοιπον..
> εκανα το ιδιο προγραμμα που καναμε πριν και στον 84Α και στον 88 με το 
> Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 4, 6, 5)
> εκανα το
> Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 7, 6, 5) στον 84Α και δουλεψε...
> αποτελεσμα ολου αυτου να καταλαβουμε οτι το γ@μημ3νο το 88 με το 
> Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 7, 6, 5)
> αυτο μας ειχε σπασει τα νευρα....



Αν είχες διαβάσει το datasheet του 16f88  θα έβλεπες ότι τα RB6 και RB7 είναι και αναλογικες είσοδοι.Οπότε χρειάζεται η εντολή ANSEL = 0 για να γίνουν digital

----------


## billtech

τιιιιιιιιιιιιι.....πλακα με κανεις?α ωραια....δικιο εχεις....αιντεεεεεεε

----------


## DT200

μα εμείς τα χρησιμοποιούμε σαν έξοδο.  και 
επίσης δοκιμάσαμε ένα πρόγραμμα το οποίο έκανε 
όλα τα πιν της πόρτας Β, On Off κάθε δύο δευτερόλεπτα
και ο *billtech* είπε ότι όλα τα πιν την κάνανε αυτή τη λειτουργία,
Άρα η πόρτα συμπεριφέρεται κανονικά ! και αφού η LCD δουλεύει 
τότε κάπου αλλού είναι το λάθος.

----------


## billtech

ναι κανονικα συμπεριφερεται....δεν ξερω που αλλου μπορει να ειναι...αλλα τωρα κανω προγραμματακια και τα ανεβαζω και βλεπω οτι παιζει...με απλα...τωρα θα βαλω και πληκτρα μεσα.

----------


## billtech

να ρωτησω κατι φιλε μου  dt200..γιατι στο προγραμματακι που μου εβαλες να περασω στον πικ μετα απο λιγα δευτερα που εμφανιζει το μυνημα κανει επανεμφανιση?και μου βγαζει και καποια κουτακια στη lcd διπλα απο το μυνημα?
δεν ξερω αν καταλαβες το προβληματακι μου...απλα ρωτω μηπως μας βοηθησει να βρουμε το προβλημα....ηδη εχω παραγγειλει μια οθονουλα...να δω αν φταιει αυτο...

----------


## DT200

είναι φυσιολογικό, διότι όταν κάνουμε την πόρτα Β ON Off 
δίνουμε και παλμό στα πιν της LCD  (Ε και RS) με αποτέλεσμα 
να κάνει ότι θέλει αφού τα δεδομένα είναι τυχαία.

----------


## billtech

A ok φιλε μου...σε ευχαριστω πολυ

----------


## DT200

που βρισκόμαστε φίλε ?

αν έχω καταλάβει καλά η οθόνη δούλεψε κανονικά με τον 16F84A 
αλλά όχι με τον 16F88 , σωστά ?

----------


## billtech

κοιτα με τον 84Α ολα καλα...νομιζω... :Smile: 
με τον 88 μονο με τα πιν που δουλεψε επεξα....4-5-6 δηλαδη....
αυτα ως τωρα...κι γραφω μυνηματακια και παιζω μαζι τους...χιχι

----------


## billtech

εχεις κατι αλλο να κανω με την οθονη πριν αρχισουμε τον κωδικα?σε ευχαριστω πολυ παντως.

----------


## DT200

πριν συνεχίσουμε θα πρέπει να έχουμε λύσει το πρόβλημα
με την LCD και τον 16F88.
δηλαδή να γράφεις πάνω στην οθόνη.

που βρισκόμαστε ακριβός ? 
γράψε μου αναλυτικά όχι συνοπτικά.

----------


## billtech

κοιτα φιλε μου...γραωφ καποια προγραμματακια που εμφανιζονται στη οθονη αλλα μονο με το παρακατω τροπο...με αλλα ποδαρακια δεν μπορω...

program LCDSASAAS

main:
TRISB=0
ANSEL=0
Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 6, 4, 7)
Lcd_Cmd(LCD_CLEAR)
Lcd_Cmd(Lcd_Cursor_Off)

ARXH:
Lcd_Cmd(LCD_CLEAR)
delay_ms(5000)
lcd_out(1,1,"billtech")
delay_ms(5000)
lcd_out(2,4,"epitelous")
DELAY_MS(5000)
lcd_out(1,1,"HELLO WORD")
DELAY_MS(5000)
GOTO ARXH
end.

αυτο που ειπε ενας φιλος σε προηγουμενο ποστ με το ANSEL=0 θα δοκιμασω επισης ξανα επιδη το εκανα αυτο.δουλεψε!! αλλα δεν παει καλα.δηλαδη καθε φορα που κανει μια εμφανιση σε κατι καποτε βγαζει λαθος γραμματα και τετοια...μεχρι εδω εφτασα.

----------


## DT200

Ωραία !
όταν τελειοποιήσεις την επικοινωνία με την LCD τότε 
πες μου για να συνεχίσουμε.

Αν έχεις οποιαδήποτε απορία , εδώ είμαστε... :Cool:

----------


## billtech

νομιζω φιλε μου ολα καλα.δουλευει.νομιζω μπορουμε να συνεχισιυμε αν μπορεις.

----------


## billtech

γεια σου φιλε μου παλι...οπως σου ειπα ολα καλα πανε..μονο ενα προβλημα αντιμετωπισα παλι...εχω βαλει τον παρακατω κωδικα:
program LCDSASAAS


main:
TRISB=0
ANSEL=0
Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 6, 4, 7)
Lcd_Cmd(LCD_CLEAR)
Lcd_Cmd(Lcd_Cursor_Off)

ARXH:
Lcd_Cmd(LCD_CLEAR)
delay_ms(5000)
lcd_out(1,1,"billtech")
delay_ms(5000)
lcd_out(2,4,"epitelous")
DELAY_MS(5000)
lcd_out(1,1,"ΡΟΛΟΙ")
DELAY_MS(5000)
GOTO ARXH

end.

το προβλημα μου πιο ειναι τωρα...οταν εχω για λιγη ωρα αυτο το μυνημα και παιζει μετα απο λιγο κολλαει η οθονη και στη πρωτη γραμμη την γεμιζει τετραγωνακια και δεν εμφανιζει το μυνημα...ειναι κατι σημαντικο αυτο?η απλα επιδη παιζει με το ιδιο μυνημα συνεχεια?

----------


## DT200

αυτό είναι κακό ! 
ή κολλάει κάπου το πρόγραμμα, ή η οθόνη,
για να καταλάβεις που είναι το πρόβλημα βάλε πάλι 
σε ένα ποδαράκι ένα Led και παρατήρησε το,
αν το Led αναβοσβήνει σύμφωνα με το πρόγραμμα σου τότε κολλάει η
οθόνη, αν δεν συμπεριφέρεται σωστά το Led τότε κολλάει ο μ/ε.

Υ.Γ όταν λάβεις τον 16F628A πες το μου.

----------


## billtech

τον εχω λαβει.τον εχω εδω.τα ποδαρακια πες μου μονο που χρειαζομαι για τον προγραμματισμο.αν ειναι ιδια με τον 88 πολυ ωραια βεβαια.

----------


## savnik

> τον εχω λαβει.τον εχω εδω.τα ποδαρακια πες μου μονο που χρειαζομαι για τον προγραμματισμο.αν ειναι ιδια με τον 88 πολυ ωραια βεβαια.



Είναι ακριβώς τα ίδια και δεν χρειάζεται τώρα η εντολή : ANSEL = 0

----------


## DT200

ναι τα ίδια είναι .
σύνδεσε τον με την LCD και γράψε κάτι για να 
πιστοποιήσουμε την επικοινωνία και μετά ξεκινάμε τα δύσκολα  :Lol:

----------


## billtech

το εχω κανει ηδη.και βγαζει το μυνημα στη οθονη

----------


## DT200

ωραία , σου στέλνω με e-mail το δικό μου Data Sheet για να έχουμε το ίδιο.

διάβασε την λειτουργία του Timer1 και ιδικά την σελίδα *51* *του εγγράφου* .

σύνδεσε τον κρύσταλλο (32.768 kHz) στα κατάλληλα ποδαράκια και μην 
ξεχάσεις τους πυκνωτές του.

Υ.Γ. το πρόγραμμα θα τρέχει με τον εσωτερικό κρύσταλλο στα 4MHz.

----------


## billtech

τελικα ποιο θα χρησιμοποιεισουμε?το 1307 η το 1302?την κοιταξα τωρα αυτην που μου ειπες.κατι καταλαβα αλλα να ξερεις σε ολο αυτο τα αγγλικαμου δεν ειναι και τοσο καλα...οχι και χαλια ομως...στο λεω πληροφοριακα  :Smile: .

OSCCON.6=4  για να το κανουμε εσσωτερικο στα 4ΜHz σωστα?

----------


## DT200

τι είναι το 1307 και το 1302 το δύο pdf που σου έστειλα ? 
αν ναι , τότε είναι και τα δύο τα ίδια , απλά το ένα είναι zip.

η καταχωρητής OSCCON δεν υπάρχει στον 628 , η συχνότητα είναι στάνταρ 
4MHz ή 37KHz .

κάνε την σύνδεση με τον εξωτερικό κρύσταλλο.

----------


## billtech

τα ds1307 και ds1302 τα RTC της MAXIM.με αυτα δεν θα κανουμε το ρολοι?τα pdf το πηρα.

----------


## DT200

αν τα έχεις μπορούμε να το κάνουμε με αυτά , αλλά σου είπα να πάρεις τον 
κρύσταλλο για να μην χρειαστείς το RTC.

με ότι θέλεις εσύ θα το φτιάξουμε αλλά εγώ δεν έχω RTC ,
ίσος να το κάνουμε στην αρχή με κρύσταλλο και αν θέλεις μετά με RTC

----------


## billtech

τα εχω ναι.ωραια θα το κανουμε οπως λες.πρωτα χωρις.απλα ελεγα με αυτα για να γλυτωσουμε κωδικα και μνημη.γιαυτο.μεχρι να το κανουμε αυτο χωρις παρειγγειλε τα και εσυ απο τη maxim.
να εισαι καλα φιλε μου

----------


## DT200

είχα λίγο χρόνο σήμερα και έκατσα να φτιάξω το ρολόι σου.
αυτός είναι ο κώδικας , πρόσεχε στα πιν της LCD.
δεν στον δίνω καλογραμμένο για να είναι κατανοητός.
ο κώδικάς έτσι όπως είναι δουλεύει αλλά έχει μέσα και λαθάκια για να 
ασχοληθείς και να μάθεις μόνος σου.
ο μ/ε 16F628 τρέχει στα 4MHz και το δευτερόλεπτο του ρολογιού είναι 
προγραμματισμένο να διαρκεί περίπου επτά δέκατα και όχι δέκα,
δώσε προσοχή στην αρχικοποίηση του μ/ε και με την βοήθεια του pdf
κατανόησε τι κάνει ο κάθε καταχωρητής που χρησιμοποιώ. 

program billtech

DIM TXT AS STRING[7]
DIM TEMP AS WORD
DIM SEC AS BYTE
DIM MIN AS BYTE
DIM HOR AS BYTE
DIM JJ AS BYTE


sub procedure  interrupt
    PIR1.0=0
    INC(SEC)
    IF SEC>60 THEN SEC=0 INC(MIN) END IF
    IF MIN>60 THEN MIN=0 INC(HOR) END IF
    IF HOR>24 THEN HOR=0  END IF

    JJ=1
 end sub

main:
  TRISB=0
  TRISA=0
  Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 4, 6, 5)
  Lcd_Cmd(LCD_CLEAR)
  Lcd_Cmd(LCD_CURSOR_OFF)
  lcd_out(2,5,"billtech")

*INTCON*=%11000000
*PIE1*.0=1
*T1CON* =%00111001
  lcd_out(1,5,"00:00:00")

  SEC=0   MIN=58    HOR=23

ARXH:
   IF JJ=0 THEN GOTO ARXH END IF
   JJ=0

  TEMP=SEC
  GOSUB CONVERT
  LCD_CHR(1,11,TXT[3])
  LCD_CHR(1,12,TXT[4])

  TEMP=MIN
  GOSUB CONVERT
  LCD_CHR(1,8,TXT[3])
  LCD_CHR(1,9,TXT[4])

  TEMP=HOR
  GOSUB CONVERT
  LCD_CHR(1,5,TXT[3])
  LCD_CHR(1,6,TXT[4])


  GOTO ARXH


CONVERT:
  WordToStrWithZeros(TEMP,TXT)
  RETURN

end.

καλό διάβασμα !

----------


## billtech

program Roloi

DIM TXT AS STRING[7]  '*     ?auto ti kanei akrivos me to 7 sti parenthesi?
DIM TEMP AS WORD      '*
DIM SEC AS BYTE       '*Dimiourdia kataxoriton
DIM MIN AS BYTE       '*
DIM HOR AS BYTE       '*
DIM JJ AS BYTE        '*        ?ti kanei auto?


sub procedure interrupt
PIR1.0=0              'kanoume to bit 0 tou PIR asso
INC(SEC)
IF SEC>59 THEN
   SEC=0 INC(MIN)
END IF

IF MIN>59 THEN
   MIN=0 INC(HOR) END IF

IF HOR>23 THEN
   HOR=0
END IF

JJ=1
end sub
'********************************************
main:
TRISB=0  'H porta B san exodos
TRISA=0  'H porta A san exodos
Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 4, 6, 5)  'rithmizoume ta podarakia tis LCD
Lcd_Cmd(LCD_CLEAR) 'Katharisma tis LCD
Lcd_Cmd(LCD_CURSOR_OFF) 'Aferi tin kersora
lcd_out(2,5,"billtech")  'Grafi sti LCD to billtech

'**********************************************
'energopoiisi tou Timer 1 kai ton karaxoriton tou

INTCON=%11000000 'Kanoume ta GIE kai PEIE asso
PIE1.0=1         'Kanoume to TMR1 asso
T1CON =%00111001 'Rithmizoume ton kataxoriti T1CON
lcd_out(1,5,"00:00:00")

SEC=0 MIN=58 HOR=23
'*********************************************
ARXH:
IF JJ=0 THEN GOTO ARXH
END IF
JJ=0

TEMP=SEC
GOSUB CONVERT
LCD_CHR(1,11,TXT[3])
LCD_CHR(1,12,TXT[4])

TEMP=MIN
GOSUB CONVERT
LCD_CHR(1,8,TXT[3])
LCD_CHR(1,9,TXT[4])

TEMP=HOR
GOSUB CONVERT
LCD_CHR(1,5,TXT[3])
LCD_CHR(1,6,TXT[4])


GOTO ARXH


CONVERT:
WordToStrWithZeros(TEMP,TXT)
RETURN

end.

γεια σου φιλε μου και σε ευχαριστω για το χρονο σου για αλλη μια φορα.

λοιπον...στα σχολια εχω βαλει καποιες αποριες που εχω και...
δεν καταλαβα γιατι πανε τοσο γρηγορα τα δευτερολεπτα στη μετρηση?
δες και τα σχολια που εβαλα να μου πεις αν καταλαβα καλα τους καταχωρητες που χρισημοποιεισες και τα υπολοιπα στο κωδικα.

----------


## DT200

> DIM TXT AS STRING[7]  '*     ?auto ti kanei akrivos me to 7 sti parenthesi?



δημιουργεί μία λέξη (με χαρακτήρες) έως 7 χαρακτήρες.




> DIM SEC AS BYTE       '*Dimiourdia kataxoriton



όλα ευτά δημιουργία καταχωρητών είναι.




> DIM JJ AS BYTE        '*        ?ti kanei auto?



και αυτό ένας καταχωρητής είναι με όνομα jj ότι θέλεις γράφεις για όνομα.




> PIR1.0=0              'kanoume to bit 0 tou PIR asso



όχι , το κάνουμε μηδέν, κατεβάζουμε την σημαία για την ακρίβεια. 




> PIE1.0=1         'Kanoume to TMR1 asso



όχι ακριβός , στην πραγματικότητα επιτρέπουμε στον TMR1 να προκαλέσει interrupt όταν υπερχειλίσει. 




> T1CON =%00111001 'Rithmizoume ton kataxoriti T1CON



εδώ κάθε bit κάνει και μία δουλειά, δες το καλά αυτό.




> δεν καταλαβα γιατι πανε τοσο γρηγορα τα δευτερολεπτα στη μετρηση?



η λογική είναι να χρησιμοποιήσουμε τον timer1, για να προκαλεί interrupt
όταν κάνει υπερχείλιση και να αυξάνουμε τα δευτερόλεπτα κατά 1 .

ο timer1 μπορεί να αυξάνει τον αριθμό του κατά ένα με δύο τρόπους 
1ον με εξωτερικούς παλμούς στο πιν RB6 ή 2ον να το συνδέσουμε στον
κρύσταλλο λειτουργίας του μ/ε και να αυξάνετε από εκεί.

τώρα , γιατί πάνε τόσο γρήγορα τα sec ? αυτό οφείλετε στο ότι ο timer1 
υπερχειλίζει πολύ γρήγορα αφού, τροφοδοτείτε από ένα σήμα 1MHz/8 
αντί του 32.768 kHz που θα είναι ο εξωτερικός κρύσταλλος που θα
βάλουμε αργότερα.

----------


## billtech

1.το JJ εννοοω γιατι το βαζουμε?εκει που το χρησιμοποιεις δεν κααλαβα τη χρηση του.
2.ειδες τις διορθωσεις που εκανα?ειναι σωστες?(για τα σημεια που μηδενιζουν οι     
  καταχωρητες)
3.ο κρυσταλλος μου ειναι 4ΜHz.
4.μπορεις να εξηγησεις και λιγο την μετατροπη που κανεις στο τελος?

----------


## DT200

> 1.το JJ εννοοω γιατι το βαζουμε?εκει που το χρησιμοποιεις δεν κααλαβα τη χρηση του.



αυτό υπάρχει εκεί για να καταλαβαίνει το πρόγραμμα ότι έχει περάσει 
ένα δευτερόλεπτο , δηλαδή αν το jj=0 δεν κάνει ανανέωση την οθόνη 
αλλά όταν γίνει το interrupt το jj γίνεται 1 και η ανανέωση αρχίζει .





> 2.ειδες τις διορθωσεις που εκανα?ειναι σωστες?(για τα σημεια που μηδενιζουν οι     καταχωρητες)



ναι είσαι σωστός.




> 3.ο κρυσταλλος μου ειναι 4ΜHz.



και εμένα ο εσωτερικός μου κρύσταλλος είναι 4ΜHz αλλά ο timer1 μετράει
τους κύκλους εντολής .
η κάθε εντολή θέλει 4 χτύπους ρολογιού , άρα ο timer1 παίρνει 1ΜHz,
και μάλιστα το περνάω από διαιρέτη και το κάνω 1ΜHz/8.




> 4.μπορεις να εξηγησεις και λιγο την μετατροπη που κανεις στο τελος?



ποια εννοείς , αυτή ?WordToStrWithZeros(TEMP,TXT) 
αν ναι τότε κοίτα στο help , θα δεις ότι κάνει μετατροπή του δυαδικού
αριθμού σε δεκαδικό και συμπληρώνει μηδενικά στις κενές θέσεις ,
δηλαδή αντί να γράψει τον αριθμό 123 , γράφει στην περίπτωση μας
0000123 , διότι το string έχει μήκος 7 χαρακτήρες.

----------


## billtech

οκ το επιασα...καταλαβα.το jj καταλαθος εγραψα την ερωτηση γιατι την απορια την ειχα πριν.την ειχα λυσει απλα μου εκεινε.τεσπα...
το καταλαβα...
και αυτο με την υπερχιληση.

να σου πω τωρα κατι αλλο.την πορτα Α την εκανες εξοδο.γτ να μην την κανουμε εισοδο και να βαλουμε τα πληκτρα που θα ρυθμιζουν ωρα λεπτα αλαρμ και οτι αλλο ειναι να ελεγχεται?ετσι ωστε να τα χρησιμοποιεισουμε?
δηλαδη να κανουμε ελεγχο ποιο πληκτρο πατηθηκε και να μπαινει να κανει τις αναλογες αλλαγες.σωστα?

----------


## DT200

Πράγματι την πορτα Α την έχω κάνει είσοδο αλλά μέχρι εδώ έχω σκεφτεί 
τα εξής:

νομίζω ότι έχουμε ένα πρόβλημα ,έγραψα όλο το πρόγραμμα που 
θέλεις για να είμαι έτυμος αλλά διαβάζοντας τα προηγούμενα ποστ σου
βλέπω ότι στριμωνόμαστε με τα πιν του μ/ε ! διότι...

6 LCD
1 για την μεταγωγή στην οθόνη set on του Alarm
1 για την μεταγωγή στην οθόνη set off του Alarm
1 για την ενεργοποίηση / απενεργοποίηση του Alarm
1 για τα λεπτά
1 για τα ώρες 
1 για την ρύθμιση της ώρας
2 για τον εξωτερικό κρύσταλλο
2 για τα ρελέ 
και αν θέλεις να βάλεις RTC τότε χρειάζεσαι 3 πιν αλλά όχι τα 2 του κρυστάλλου.

σύνολο 16 και ο μ/ε έχει 16 , είναι λίγο στριμόκολα ...  :Lol:

----------


## billtech

εχεις ενα δικιο σε αυτο..ΜΕΓΑΛΟ μαλιστα...πες μου τι προτινεις να κανουμε....και τα υπολοιπα ασε τα σε εμενα... :Wink:  αμα πια δεν θα σκασουμε κιολασ ε?αν και απο οτι εχω σκεφτει μπορουμε να γλυτωσουμε καποια με προγραμματισμο.ας πουμε ενα κουμπι να κανει 2 λειτουργιες ας πουμε αλλα δεν ξερω αν ειναι ευκολο.τεσπα πες εσυ και βλεπουμε.σωστος?

----------


## billtech

τωρα κανω πειραματα σε αυτο για να καταλαβω τους καταχωρητες που χρησιμοποιεισες

----------


## DT200

σήμερα κατά τις 17:00 θα κάτσω να φτιάξω ένα καινούριο μενού. 
σίγουρα δεν χωράει στα 2Κ μνήμης που έχει ο 16F628 αλλά ο 
16F88 έχει 4Κ και δεν θα έχεις πρόβλημα.
τα λέμε ...

----------


## billtech

λοιπον φιλε μου επιεδη σε αυτη τη δουλεια εχουμε κανει πολλες μετατροπες που δεν επρεπε αμα θες να παμε σε ενα αλλο επεξεργαστη ας παμε αλλη μια δικαιολογια θα ειναι.  :Smile:  αν ειναι για να ειναι πιο ευκολο με ενα αλλο επεξεργαστη που εχει πολλες πορτες αε το κανουμε.εχω κοιταξει για τον PIC4520 και τον PIC16F877A.τι πιστευεις?

----------


## DT200

αν εννοείς τον 18F4520 τότε είναι σαν να σκοτώνεις ένα μυρμήγκι
με πυρηνικό πύραυλο !!!
διότι έχει 40 πιν και 32Κ μνήμη ...
ο PIC16F877 είναι καλός αλλά και αυτός έχει 40 πιν,

εγώ λέω ότι αν έχεις τον PIC16F877 να κάνουνε την εξέλιξη πάνω σε αυτόν
και στο τέλος να το υλοποιήσεις με κάποιον που θα έχει  28 πιν.

Π.Χ. 16F876, 16F873, ...

----------


## billtech

PIC18F4520 εννοουσα.εχει δικιο και για τα ποδια και για τη μνημη.απλα το ειπα επειδη παρειγγειλα ενα απο αυτον.
εχω ομως παραγγειλει και τον PIC16F877Α και τον PIC16F887.ξερεις τι σκεφτομουν?αμα ειναι να μπει καποιος με πολλα ποδια να τον κανουμε νακανει και κατι αλλο.να διαβαζει και 2 θερμομετρα την μαξιμ.τα γνωστα της ds1820 και τωρα εχει και 2 μερες λεω και ολο λεω λογο χρονου να κατσω να διαβασω το datasheet του.
αλλα εκεινα ειναι προερετικα.αμα θελουμε τα βαζουμε.

----------


## DT200

πολύ ωραία η σκέψη σου , σε λίγο καιρό θα μπορείς να κάνεις πάρα πολλά 
πράγματα με τους μ/ε.

σε λίγο θα αναρτήσω ένα κώδικα που θα είναι κομμένος  σε δύο 
σελίδες , αυτό το κάνουμε για να σπάμε τα μεγάλα προγράμματα σε κομμάτια 
και να δουλεύονται καλύτερα,
θα δεις το παράδειγμά μου και θα καταλάβεις.

----------


## billtech

οκ  :Smile:  να εισαι καλα

----------


## DT200

αυτό είναι ένα πρόγραμμα για τον 16F628 @4MHz
και μετράει πόσες φορές ήρθε ένας θετικός παλμός στο RA3
αν όμως ο παλμός είναι μεγαλύτερος από 100mS θα μετρήσει παραπάνω
ένα παλμό.

το παράξενο που θα δεις είναι ότι δεν υπάρχει ρουτίνα μετατροπής 
από δυαδικό σε δεκαδικό (WordToStr), διότι είναι σε μία δεύτερη σελίδα 
που την καλώ με το όνομα CONVERT, παίξε λίγο και θα το καταλάβεις αμέσως.

Υ.Γ. επισυνάπτω και ένα αρχείο για την MikroBasic .
Υ.Γ. αυτό είναι άσχετο με το ρολόι.




```
program billtech_test

include "CONVERT"

DIM DT  AS BYTE

main:
  TRISB=0
  TRISA=255
  CMCON =%00000111
  Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 4, 6, 5)
  Lcd_Cmd(LCD_CLEAR)
  Lcd_Cmd(LCD_CURSOR_OFF)
  lcd_out(2,5,"billtech")

  TEMP=0
  
ARXH:
   DT=PORTA
   IF DT.3=1 THEN INC(TEMP) END IF
   CONVERT
   lcd_out(1,5,TXT)
   DELAY_MS(100)
   GOTO ARXH
end.
```

----------


## billtech

περιμενε λιγο γιατι με μπερδεψες.αυτο ειναι ασχετο με το ρολοι σωστα?
θα το δω βεβαια το προγραμμα αυτο.εννοειται.
να εισαι καλα

----------


## billtech

φιλς μου πολυ ωραιο προγραμμα.πραγματικα ωραιο γιατι αυτο οτι μπορεις να καλεσεις ενα αλλο προγραμμα που ειναι σπαασμενο στα 2 αλλα μονο στη matlab. πολυ ωραιο προγραμμα σε ευχαριστω.το καταλαβα...δηλαδη στο αλλο που μου ειχες στειλει θα μπορουσαμε το κομματι που ειχες ονομασει ΑRXH να το καλουσαμε απο δευτερο μερος ε?

----------


## billtech

γεια σου φιλε μου....διαβασα το προγραμμα που μου εστειλες.τι σκεφτηκες τελικα με το ρολοι?

----------


## DT200

η επόμενη αποστολή σου είναι να φτιάξεις μία ρουτίνα που 
θα παρακολουθεί ένα μπουτόν και κάθε φορά που θα το πατάς 
θα κάνει ένα Led on και όταν το ξανά πατάς off και μετά πάλι on.
ελπίζω να το εξέφρασα σωστά ...
αν δεν θέλεις Led γράφε On Off στην LCD.

περιμένω νέα σου... :Biggrin:

----------


## billtech

ετοιμο!! νομιζω κιολας...

program koumpi 'gia pic16f84a

DIM TEMP AS BYTE

main:
  TRISB=%11110000
  PORTB=0

START:
  TEMP=PORTB
  delay_ms(300)
  IF TEMP.7=0 THEN
    PORTB=NOT(PORTB.0)
  end if
  GOTO START

END.

----------


## DT200

για αρχή καλό είναι αλλά έχει προβληματάκια .
1ον δεν αναβοσβήνει μόνο το RB0 αλλά στην αρχή τα 
ανάβει όλα και μετά μόνο το RB0 .
2ον η δειγματοληψία είναι πολύ αργή (300mS)
και χάνονται μερικά πατήματα (μια καλή είναι 50mS)

3ον και σημαντικότερο είναι ότι αν κρατάς το μπουτόν πατημένο το Led
αναβοσβήνει, και αυτός ακριβός είναι και ο σκοπός της άσκησης , 
να βρεις ένα τρόπο που να μην συμβαίνει αυτό.

θα πρέπει λιπών ο μ/ε να ελέγχει αν το μπουτόν έχει έρθει σε κατάσταση 
ηρεμίας και μετά να ξανά λαμβάνει υπόψιν του το νέο σήμα.

----------


## billtech

να σου κανω μια ισως χαζη ερωτηση?με το προγραμμα της microbasic μπορω να κανω ελεγχο του προγραμματος αν κανει αυτο που θελω χωρις να αναγκαζομε να το φορτωνω στον pic.αν ναι μπορεις να μου πεις στα ελληνικα γτ χαθηκα λιγο?  :Smile:  σε ευχαριστω πολυ.again

----------


## DT200

Μπορείς να κάνεις εξομοίωση του προγράμματος αλλά δεν είναι 100% 
σίγουρο.
διάβασε το mikrobasic_manual.pdf από την σελίδα 7 και θα πάρεις μία γεύση.
για να σε βοηθείσω θα σου πω ότι επιλέγεις 
το τάμπ debugger > software simulator μετά
το τάμπ run > start debugger και στο παράθυρο που εμφανίζετε επιλέγεις
τον καταχωρητή που θέλεις να παρακολουθείς Π.Χ. PORTB.

----------


## billtech

Οκ ευχαριστω...θα παλεψω αυτο που με εβαλες να κανω και ο θεος μαζι μας.

----------


## DT200

έλα φίλε που βρίσκεσαι ? (με την άσκηση)
αν έχει κολλήσει κάπου ίσος να μπορώ να σε βοηθείσω.

πες μου λίγο την λογική που έχεις στο μυαλό σου , 
δηλαδή πώς το φαντάζεσαι όχι με εντολές αλλά 
με απλά λόγια.

----------


## billtech

κοιτα εχω κολλησει.δεν μπορω να το βγαλω σε κωδικα αυτο που σκεφτομαι.
στο σημειο που ειναι οσο ειναι πατημενω το κουμπι να αλλαζει μια φορα κατασταση και οχι συνεχεια.
πως το σκεφτομαι.
να κοιταει αν πατηθηκε το κουμπι και αμα πατηθει να του αλλαζει κατασταση στη εξοδο χωρις να αναβοσβηνει για οσο ειναι πατημενο..πως?ελεγχοντας την προηγουμενη κατασταση της εξοδου..να δει οτι αλλαξε κατασταση και να του πει οτι αν δεν ξαναγινει ασσος το κουμπι και μετα παλι μηδεν μην κανεις τιποτα στη εξοδο.
δεν ξερω φιλε μου αν διατυπωσα σωστα αυτο που σκεφτομαι.
σκεφτομουν να το κανω με while αλλα δεν μου βγαινει.και με if μου κανει αυτο που εκανε και το αλλο προγραμμα που ανεβασα.που αναβοσβηνει..

----------


## DT200

καλή η σκέψη σου αλλά λίγο περίπλοκη,
εγώ θα το έκανα αλλιώς,
if το κουμπί είναι 1 then αλλαγή κατάστασης   

μετά 

if το κουμπί ελευθερώθηκε then  ξανά εκτέλεσε το πρόγραμμα 
else περίμενε μέχρι να ελευθερωθεί  .

για πάλεψε και αυτό  :Wink:

----------


## Nemmesis

για να μπω και εγω σιγα σιγα στο θεμα... μιας και ειμαστε οι ιδιοι και ιδιοι με την microbasic εδω.. επειδη τωρα δεν ειμαι σε pc με microbasic για να σου κανω παραδειγμα. να σου πω οτι εμενα ποιο πολυ ΕΚΤΟΣ απο τα pdf των πικ με βοηθεισε το help που εχει μεσα η microbasic... ψαξε εκει για την εντολη "button" και θα σου βγαλει ακριβως οτι θελεις να κανεις...

μια και το ανεφερα μηπως λεω εχει κανενας να με κερασει κανα κρακερακι για αυτο το πολυ ωραιο προγραμμα? μια και μετα τον καμενο σκληρο δεν εχω τπτ..

----------


## billtech

για σου φιλε μου nemessis το ειδα και εγω αυτο που προτινεις και συμφωνω μαζι σου αλλα προσπαθω να δω αν μπορω να το βγαλω με δικο μου τροπο για να μαθω καλυτερα προγραμματισμο καταλαβες?αμα δεν τα καταφερω θα φτασω καταληξω εκει.σε ευχαριστω πολυ φιλε μου.

δεν καταλαβα τι θες να πω για αυτο:




> μια και το ανεφερα μηπως λεω εχει κανενας να με κερασει κανα κρακερακι για αυτο το πολυ ωραιο προγραμμα? μια και μετα τον καμενο σκληρο δεν εχω τπτ..



και επειδη ημουν αρρωστος θα κατσω αποψε να δω πως θα το κανω.

----------


## savnik

> μια και το ανεφερα μηπως λεω εχει κανενας να με κερασει κανα κρακερακι για αυτο το πολυ ωραιο προγραμμα? μια και μετα τον καμενο σκληρο δεν εχω τπτ..



Πιστευω να σου αρέσει το κρακερακι που σου έστειλα.
Δες στα μηνύματα σου.

----------


## billtech

ρε γμτ δεν μου βγαινει...

η μου βγαινει το ιδιο η ανβοσβηνει συνεχεια και δεν σταματαει μετα.
κοιτα που κολλησα!!!

----------


## DT200

αν θέλεις ανάρτησε μερικά προγράμματα που έχει 
γράψει και να δούμε που είναι το πρόβλημα.

----------


## billtech

επιτελους!!!mission complete...με τη βοηθεια του φιλου nemessis

program ssssssssssss

DIM oldstate AS BYTE

main:
  TRISB=%11110000
  PORTB=0

START:
while true
  if Button(PORTB, 7, 300, 0) then
    oldstate = 255
  end if
  if oldstate and Button(PORTB, 7, 300, 1) then
    PORTB = not(PORTB)
    oldstate = 0
  end if
wend

END.

----------


## DT200

μπράβο φίλε τα κατάφερες ! Αλλά αυτό το πρόγραμμα 
είναι μέσα από τα παραδείγματα της MikroBasic.

μία καλή εξάσκηση θα ήταν να κράταγες το ίδιο πρόγραμμα αλλά 
να μην χρειαζόσουν κανένα καταχωρητή όπως τον oldstate.
(πριν στο προτείνω το έχω είδει δοκιμάσει και γίνετε)

και μετά αφού έχεις καταλάβει την λογική μπορείς να το κάνεις με 
 δικέ σου εντολές.

Υ.Γ. τώρα στην αρχή είναι δύσκολα αλλά σε λίγες μέρες θα πετάς...

Υ.Γ. ο χρόνος 300mS που έχεις ορίσει (if Button(PORTB, 7, *300*, 0) then)
δεν υπάρχει διότι ο μέγιστος είναι 255 , άρα 300-*256*=44mS

----------


## billtech

αν δηλαδη εγω εβαζα f Button(PORTB, 7, *254*, 0) then τοτε θα ηταν ενταξει?
δηλαδη τωρα πρεπει να το ξανακανω?ξερεις κατι ομως?και τα προγραμματακια που προσπαθουσα να κανω ειχαν αλλο καταχωρητη.

----------


## DT200

το 254 είναι ο ελάχιστος χρόνος που θα πρέπει να πατηθεί 
το μπουτόν για να είναι έγκυρο το πάτημα.

θα σου δείξω τι εννοώ με την άσκηση.




```
program koumpi 'gia pic16f84a

main:
TRISB=%11110000
PORTB=0

START:
if Button(PORTB, 7, 100, 0) then  goto aa
end if
goto start

aa:
while true
if Button(PORTB, 7, 100, 1) then
PORTB = not(PORTB)
goto start
end if
wend

END.
```


προσπάθησε και γράψε με λόγια πώς λειτουργεί αυτό το πρόγραμμα.

----------


## billtech

program koumpi

main:
TRISB=%11110000   '7,6,5,4 eisidos//3,2,1,0 exodos
PORTB=0

START:
if Button(PORTB, 7, 100, 0) then  goto aa   'sto podaraki 7 ,periodos 100ms,energo ginete otan paei sto miden
end if
goto start

aa:
while true
if Button(PORTB, 7, 100, 1) then 'sto podaraki 7 ,periodos 100ms,energo ginete otan paei sto ena
PORTB = not(PORTB)  'antistrepse tin exodo
goto start
end if
wend

END.

καπως ετσι.

----------


## DT200

ποιο πολύ με ενδιαφέρει να κατανοήσεις, πως και πότε 
λειτουργούν τα if , αν θες γράψε κάτι για αυτά.

----------


## billtech

δεν καταλαβα ακριβως τι θες να πεις.
_ if Button(PORTB, 7, 100, 0) then  goto aa   'sto podaraki 7 ,periodos 100ms,energo ginete otan paei sto miden

_αν δεις μεταβολη απο 1 σε 0πηγαινε στο αα.κανε αυτο τον ελεγχο καθε 100ms.

----------


## DT200

όχι ακριβός , δεν κάνει έλεγχο κάθε 100mS αλλά όσο ποιο 
γρήγορα μπορεί ο μ/ε .
τα 100mS έχουν οριστεί σαν ελάχιστος χρόνος που θα διαρκέσει 
η μεταβολή από 1 σε 0 για να εκτελεστεί η συνθήκη if .

αν θες πες και το επόμενο while true και if.

----------


## billtech

while true
if Button(PORTB, 7, 100, 1) then 'sto podaraki 7 ,periodos 100ms,energo ginete otan paei sto ena
PORTB = not(PORTB)  'antistrepse tin exodo
goto start
end if
wend

ενωσο ειναι αληθες ελεγχε αν στο  ποδαρακι 7 υπαρχει μεταβολη απο 0 σε 1.οταν δει την μεταβολη αρα δεν ειναι αληθες παει πισω και ελεγχει αν υπαρχει μεταβολη απο 1 σε 0.

----------


## DT200

μια χαρά ! :Rolleyes: 

τώρα μένει να το κάνεις με δικέ σου εντολές , δεν 
θα σου είναι πολύ δύσκολο διότι το έχεις καταλάβει .

Υ.Γ. σκοπός μου δεν είναι να σου κάνω την ζωή δύσκολη,
αλλά έχεις επιλέξει μία δύσκολη κατασκευή που απαιτεί 
συνδυασμό γνώσεων και πρέπει να τις αποκτήσεις.

σου έχω εμπιστοσύνη !  :Wink:

----------


## billtech

κοιτα θα το παλεψω.την λογικη το ξερω οτι την εχω αλλα αμα μου βγει θα ειναι τεραστιο.ειμαι σιγουρος.

μετα απο αυτο ειναι και αλλα που πρεπει να κανω με αυτοτο τροπο?  :Smile:   :Smile: 
πλακα κανω..γιατι ζωη χωρις πλακα...αστα να πανε.σωστα?

----------


## billtech

program enoee

main:
TRISB=%11110000   '7,6,5,4 eisidos//3,2,1,0 exodos
PORTB=0

START:
if portb.7=0 then goto aaa
else goto start
  end if

  aaa:
  if portb.7=1 then
     portb.0=not(portb.0)
     goto start
     else goto aaa
  end if

 end.

αυτο εκανα..αλλα δουλευει μονο μια φορα  :Smile:  δεν μου βγαινει...κοιτα που κολλησαμε τωρα.

----------


## DT200

αυτό οφείλετε στην εντολή *portb.0*=not(portb.0)
αν το αλλάξεις με το portb=not(portb.0) θα 
δουλέψει αλλά όχι ολόσωστα , διότι στην αρχή 
τα ανάβει όλα και μετά μόνο το RB0.
για κάνε μία προσπάθεια να διορθώσεις αυτήν την ανωμαλία.

Υ.Γ για την καλύτερη λειτουργία του προγράμματος βάλε 
και μία καθυστέρηση μέσα (delay) επειδή δειγματοληπτεί   
πολύ συχνά 

Υ.Γ. καλή και η πλακίτσα ...  :Smile:

----------


## billtech

program enoee

main:
TRISB=%11110000   '7,6,5,4 eisidos//3,2,1,0 exodos
PORTB.0=1

START:
if portb.7=0 then goto aaa
else goto start
  end if

  aaa:
  if portb.7=1 then
     portb=not(portb.0)
     goto start
     else goto aaa
  end if

 end.

νομιζω το εφτιαξα.

----------


## DT200

δεν το έχεις πετύχει ακόμα ,
δεν ξέρω αν θα σε βόλευε να χρησιμοποιήσεις 
και κάποιον καταχωρητή .

----------


## billtech

τι εννοεις οχι ακομα?αφου μου δουλεψε κανονικα.που ειναι το προβλημα?

----------


## DT200

> θα δουλέψει αλλά όχι ολόσωστα , διότι στην αρχή 
> τα ανάβει όλα και μετά μόνο το RB0.
> για κάνε μία προσπάθεια να διορθώσεις αυτήν την ανωμαλία.
> 
> Υ.Γ για την καλύτερη λειτουργία του προγράμματος βάλε 
> και μία καθυστέρηση μέσα (delay) επειδή δειγματοληπτεί   
> πολύ συχνά




Δεν ελέγχεις μόνο το RB0 αλλά έχει παρενέργειες 
και στα υπόλοιπα πιν της πόρτας Β.

----------


## billtech

επιμενω να μην καταλαβαινω που ειναι το προβλημα στο ποδαρακι της εξοδου.

main:
TRISB=%11110000   '7,6,5,4 eisidos//3,2,1,0 exodos
* PORTB.0=1*

START:
if portb.7=0 then goto aaa
else goto start
  end if

  aaa:
  if portb.7=1 then
     portb=not(portb.0)
     goto start
     else goto aaa
  end if

 end.

δεν καταλαβαινω...ειλικρινα

----------


## DT200

αν βάλεις Led σε όλα τα ποδαράκια της πόρτας Β θα δεις ότι 
δεν μπορείς να σβήσεις τα Led διότι έχει δυσλειτουργία
το πρόγραμμα.
αυτό θα πρέπει να διορθώσεις.

----------


## billtech

μα αφου εμεις μονο το RB0 θελουμε να παιζει...γτ να αλλαζουν τα υπολοιπα?

----------


## DT200

διότι χρησιμοποιούμε την εντολή *portb*= not(portb.0).
δηλαδή του λέμε κάτι που αφορά όλη την πόρτα Β
και όχι μόνο το portb.0 .

----------


## billtech

ναι αλλα σε ολο αυτο αλλαζουμε μονο το ποδαρακι 0 αρα τα αλλα μενουν οπως ειναι...δεν αλλαζουν αυτα.

----------


## DT200

το κακό είναι ότι δεν μπορούμε να τα 
ελέγξουμε Π.Χ. να σβήσουμε τα Led.

----------


## billtech

ποια δεν μπορουμε να ελεγξουμε?τα ποδαρακια 1,2,3? δηλαδη πρεπει να τα ελεγχουμε και αυτα με αυτο το κουμπι?εκεινα μπορει πιο μπροστα να τα κανουμε κατι αλλο ανα πασα στιγμη.που κολλας φιλαρακι?δεν καταλαβω.

----------


## DT200

υπέθεσε ότι στο πιν 1 και 2 έχεις από ένα ρελέ,
αν δεν εξαλείψεις αυτό το φαινόμενο πως θα τα 
ελέγξεις ? θα σου βγάλει όλη τη θύρα άχρηστη.

----------


## billtech

συγνωμη αλλα δεν σε καταλαβαινω.αφου το portb.0 αντιστρεφουμε.τα αλλα μπορουμε να τα κανουμε οτι θελουμε.

----------


## DT200

όχι δεν μπορούμε !!!





> αν βάλεις Led σε όλα τα ποδαράκια της πόρτας Β θα δεις ότι 
> δεν μπορείς να σβήσεις τα Led διότι έχει δυσλειτουργία
> το πρόγραμμα.
> αυτό θα πρέπει να διορθώσεις.

----------


## billtech

συγνωμη τοτε αλλα δεν μπορω να βρω το λαθος επειδη δεν μπορω να καταλαβω το προβλημα.δεν ξερω να το διορθωσω.αν μπορεις να κανεις τη καλη καλος...σορρυ ε

----------


## DT200

επειδή δεν θέλω να σε κουράζω, θα σου κάνω 
μια τελευταία ερώτηση, έχεις βάλει Led (ή με το 
πολύμετρο) στα πιν 0,1,2,3 για να το δεις στην 
πράξη και όχι μόνο με την σκέψη.
αυτό που συμβαίνει είναι ότι τα Led 1,2,3 είναι 
συνέχεια αναμμένα και δεν σβήνουν μόνιμα.

----------


## billtech

κοιτα να δεις δεν εχεις αδικο οτι ειναι συνεχεια αναμμενα.αλλα δεν τους δωσαμε πουθενα εντολη να σβησουν...συνεχεια αναμμενα τα αφησαμε..λογικο δεν ειναι?θα το κανω και με το πολυμετρο και με led αυτο που λες.

----------


## DT200

αν μπορείς βρες ένα τρόπο να τα σβησείς  ή
να έχεις ένα αναμμένο , ένα σβηστό .

----------


## billtech

δε καταλαβα...αφου ο σκοπος της ασκησης ηταν να παιζουμε με το ενα led.δεν ασχοληθηκαμε πουθενα με τα αλλα...δηλαδη αν το εκανα trisb=%11111110 που αναγκαστικα θα ειχα σαν εξοδο το ο ποδαρακι τα αλλα δεν τα πειραζουμε ετσι και αλλιως.
με μπερδεψες πολυ παντως

----------


## DT200

χαίρομαι που έδωσες σαν πιθανή λύση το trisb=%11111110 .
και πράγματι η αρχική άσκηση ήταν μόνο για το ένα πιν, αλλά αφού το  
έφτιαξες αυτό , θα πρέπει να προχωρήσουμε στο επόμενο στάδιο, 
που είναι αυτό που συζητάμε τόσες μέρες , δηλαδή 
ο έλεγχος μόνο ενός πιν χωρείς να επηρεάζονται τα άλλα (όχι με trisb=%11111110)

και το καλύτερο θα ήταν να ανοίξουμε ένα καινούριο τόπικ για αυτήν την άσκηση. http://www.hlektronika.gr/forum/show...719#post282719

----------


## billtech

δηλαδη σε εισαγωγικα το λυσαμε αυτο? με το ρολοι τι κανουμε τωρα?

----------


## DT200

σχεδόν το λύσαμε , αλλά απέχεις πολύ ακόμα από το ρολόι.
η γνώμη μου είναι να μάθεις να ελέγχεις τα μπουτόν και τα πιν,
να μάθεις τα interrupt , τα module και φυσικά πολύ καλά τα if ,
μετά θα είσαι έτοιμος για τις πρώτες προσπάθειες του ρολογιού.

αν θέλεις να μην τα κάνουμε αυτά, ΟΚ. αλλά δεν έχεις πολλές 
ελπίδες να γράψεις ένα τέτοιο πρόγραμμα, με τις γνώσεις που έχεις τώρα.

----------


## billtech

απλα τωρα αργο λιγο να ασχοληθω γιατι δουλυω κιολας.και εχω λιγο ανακατεμενο προγραμμα.γιαυτο.και πρεπει να κανω και την υπολυπη κατασκευη που περιεχει το ρολοι μεσα.το ενα κυκλωμα ειναι αυτο με το πηνιο που εκανα την ερωτηση στο σιτε και ανεβασα το σχηματικο.το οποιο δουλευει σιγουρα αν θες να το κανεις.

εννοειται οτι θελω να μαθω

----------


## DT200

μόλις λύσεις το πρόβλημα του θερμόμετρου, θα 
ξεκινήσεις ένα πρόγραμμα που θα περιλαμβάνει όλα
όσα έμαθες μέχρι σήμερα και ακόμα περισσότερα ...  :W00t: 

θα ήθελα να είμαι από μία άκρη να σε δω στις  πρώτες σου προσπάθειες  :Lol:

----------


## DT200

κάνω αυτό το πόστ για να βάλω μέσα 
τα λίνκ από τα μαθήματα που κάναμε ώστε ,αν κάποιος στο μέλλον 
διαβάσει αυτό το θέμα να μπορέσει να βγάλει άκρη.

Μάθημα στην MikroBasic No1

Μάθημα στην MikroBasic No2 (module) 

Μάθημα στην MikroBasic No3 (σύγκριση)

Μάθημα στην MikroBasic No4 (επικοινωνία I²C)

συνδεση με dallas18s20(ασκηση 5η)

----------


## DT200

αυτή είναι η συνέχεια από το θέμα με το RTC. http://www.hlektronika.gr/forum/show...190#post286190 

λοιπόν έκανα τις βασικές διορθώσεις και ομολογώ ότι έχεις προχωρήσει 
αρκετά, μπράβο !

το πρόβλημα σου, το είχα επισημάνει σε προηγούμενο πόστ αλλά δεν 
πειράζει στο έφτιαξα στο ένα κομμάτι και θα το φτιάξεις μόνος σου 
το υπόλοιπο.

μία παρατήρηση που έχω ακόμα είναι ότι δεν έχεις αποφασίσει
ακόμα με ποια λογική θα έχεις τα μπουτόν , με το 1 ή με το 0.

θα πρέπει να έχεις μία λογική διότι όλοι μπερδευόμαστε,
καλό θα είναι να έχεις την λογική του 1, δηλαδή με το πάτημα να έχεις +5V.

δώσε προσοχή στο πρόγραμμα που σου στέλνω διότι το 
έχω σκαλίσει αρκετά και μπορεί να έχω ξεχάσει κάποιο μπουτόν
με λάθος λογική και να μην τρέχει σωστά το πρόγραμμα.

----------


## billtech

καλησπερα...
λοιπον...το τελειωα εως εδω..κοιταχτε το..
για τον φιλο μου DΤ200 που μου ζητησε να το κανω σε modules δεν το εκανα ακομα αλλα θα το κανω...το υποσχομαι  :Smile:  απλα δεν ασχοληθηκα ακομα γιατι εκατσα και το εκανα αυτο..
εχει ενα προβληματακι που δεν μπορεσα να καταλαβω γιατι συμβαινει.ισως ειναι περα απο τις γνωσεις μου γιαυτο και σας το θετω υποψιν...
ενω ολα μετρανε κανονικα στα alarms στη ρυθμιση της ωρας τα λεπτα πανε εως το 79 και οταν πατησω το κουμπακι που αναιβαζει ξεκινα να μετρα απο το 68.δεν ξερω γιατι συμβαινει αυτο.
α και για αυτο που ειπε ο φιλος DT200 για τα κουμπακια να αποφασισω αν θα ειναι στο 0 η στο 1. τα εχω να λειτουργουν στο 0 γιατι εχω ενα κυκλωματακι ετοιμο που ειναι στη γη τα κουμπακια.γιαυτο και τα χρησιμοποιω αυτα.οταν κανω σε PCB το κυκλωμα θα αλλαξω τον προγραμματισμο.και θα τον κανω να πηγαινουν στα 5βολτ για να ενεργοποιουνται.
αυτα τα ολοιγα  :Smile: 
μενει να κανω και την συγκριση αναμεσα στην ωρα και τα alarms.και εννοειται αυτο που υποσχεθηκα με τα modules.α και αυτο που ειπε ο φιλος savnik νομιζω για να μεταφερω τα alarms να αποθηκευοναι για να μην χαθουν μετα απο σβησημο της τασης αυτο ισως το δουμε στο τελος.
ευχαριστω.
κοιταχτε τα και μου λετε.

----------


## DT200

> εχει ενα προβληματακι που δεν μπορεσα να καταλαβω γιατι συμβαινει.
> ενω ολα μετρανε κανονικα στα alarms. στη ρυθμιση της ωρας, *οί ώρες* πανε εως το 79 και οταν πατησω το κουμπακι που αναιβαζει ξεκινα να μετρα απο το 68.δεν ξερω γιατι συμβαινει αυτο.



η λύση είναι πολύ απλή ,  θα σε κάνω να το πεις μόνος σου και μετά θα 
σου εξηγήσω γιατί συμβαίνει αυτό.

πρώτα από όλα θέλω να μου πεις με λόγια, τι κάνεις για να 
εξασφαλίσεις ότι ο αριθμός σου δεν θα ξεπεράσει το 24.

----------


## billtech

εχω βαλει τον ελεγχο
 a10:
       if Button(PORTD, 2, 100, 1) then
            INC(INC_min)             'αυξησε τον min
        if INC_min=60 then INC_min=0 end if 'εν ο min ειναι ισος με 60 τοτε μηδενισε τον


        BCD_min=Dec2Bcd(INC_min) παρε τον min και μετετρεψε τον σε bcd.

που ειναι το προβλημα?ε ρε γελια αν ειναι καμια μ@λακια..ουπσ πιπερι  :Smile:

----------


## DT200

εσύ θα με τρελάνεις !!! 
το πρόβλημα είναι στην οθόνη SET TIME και στην ρύθμιση
των ωρών , αλλά εσύ μου λες για τα λεπτά !
τι έγινε τώρα ? τρελαθήκαμε και οι δύο ??? :Confused1:

----------


## billtech

μαλλον... :Smile: 
ναι φιλε μου στη οθονη που ρυθμιζουμε τις ωρες αλλα το προβλημα ειναι στα λεπτα.αν και καποτε μου το κανει και στις ωρες.ισως το ειχα διατυπωσει λαθος.
τωρα ειναι στα λεπτα.εσυ που εντοπισες το προβλημα στις ωρες?
μαλλον μας βλεπω να τρελλενομαστε..η μαλλον να σε τρελλαινω.

----------


## DT200

πρώτα μία ερώτηση , σε ποιο σημείο του 
κώδικα λες στο RTC να ξεκινήσει να μετράει ?

το πρόβλημα που έχουμε και οι δύο λύνεται με τον ίδιο τρόπο.
και συνεχίζω...
δηλαδή η ασφαλιστική σου  δικλίδα είναι ότι όταν ο αριθμός 
γίνει ίσος με το 60 τότε κάνε τον 0 σωστά ?
εγώ θα σου ζητήσω να βρεις έναν άλλο τρόπο, ώστε να έχεις το 
ίδιο αποτέλεσμα αλλά με άλλη λογική Π.Χ. μην χρησιμοποιήσεις το =

----------


## billtech

του λεω μεσα στο set time. μου ηρθε και το εκανα αυτο πριν...ετσι για αλλαγη..πλακα κανω..μου αρεσε σαν ιδεα και το εκανα.
δηλαδη ποιο ειναι το προβλημα?

----------


## DT200

κανένα πρόβλημα , για τις άλλες ερωτήσεις , τι λες ?

----------


## billtech

ωχ..ποιες αλλες ερωτησεις?αρχισα και χαζευω η μου φενεται?

----------


## DT200

> το πρόβλημα που έχουμε και οι δύο λύνεται με τον ίδιο τρόπο.
> και συνεχίζω...
> δηλαδή η ασφαλιστική σου  δικλίδα είναι ότι όταν ο αριθμός 
> γίνει ίσος με το 60 τότε κάνε τον 0 σωστά ?
> *εγώ θα σου ζητήσω να βρεις έναν άλλο τρόπο*, ώστε να έχεις το 
> ίδιο αποτέλεσμα αλλά με άλλη λογική Π.Χ. μην χρησιμοποιήσεις το =



έλα ρε συ εδώ είναι.

----------


## billtech

δηλαδη αν χρησιμοποιησω αυτο?αυτο εννοεις? αντι =60 να το κανω >59?
η με αλλη εντολη θες?

----------


## DT200

ωραίο είναι αυτό, για κάντο να δούμε δουλεύει.

----------


## billtech

με το αλλο που προτινε ο φιλος savnik για αποθηκευση των αλαρμ σε μνημη να μη τα χασουμε πως γινεται?η δεν χρειαζεται?
θα το κανω αυτο που ειπες και βλεπουμε.θα σου πω νεα.

----------


## billtech

το εκανα!!!δουλευει...το παραξενο να μην δουλευε ε?  :Smile: 
οκ και με αυτο.τωρα θα προσπαθησω να κανω την συγκριση των αλαρμ με την πραγματικη ωρα.

----------


## DT200

δεν θέλεις να μάθεις γιατί δεν δούλευε ?
αν θέλεις να μάθεις ψάχτο λίγο μόνος σου και βλέπουμε.

θα σε βοηθείσω λίγο λέγοντας σου ότι έχει να κάνει 
με τον καταχωρητή $02 του RTC

----------


## billtech

θελω να μαθω...αλλα το παραξενο που βγαινει τωρα αφου λες οτι φταει αυτο γιατι εσενα σου εκανε προβλημα το $01.ειχες πει εσενα το εκανε στις ωρες.ενω εμενα στα λεπτα.

ειδες τα αλλα ποστ μου?πιο πανω.

----------


## DT200

και οι δύο την ίδια λύση έχουμε απλά σε άλλον καταχωρητή,

σε εμένα το πρόβλημα ήταν $02, σε εσένα πρέπει να είναι το $01.

για πες μου καμιά καλή θεωρία για το πρόβλημα.

----------


## billtech

φιλε μου το κοιταξα αλλα δεν μπορεσα να το βρω.

δεν μου ειπες ομως τι να καουμε τωρα.να αποθηκευσουμε τα αλαρμ να μην χαθουν? η να κανουμε τον ελεγχο?
και επισης σκεφτηκα να προσθεσουμε αλλες 2 οθονες.η ακομα και μια αν γινεται που να κανουμε on/off το καθε αλαρμ.δηλαδη αντι με διακοπτη οπως ειχαμε πει να κανουμε ενα καταχωρητη που θα περνει τιμη 1 και 0 αλλα εμας θα μας δειχνει en-able και dis-able και θα εχουμε με το ενα κουμπι να αλλαζει ο ενας και με το αλλο κουμπι ο αλλος.τι λες για αυτο?
περιμενω σχολια σου και συνεχιζουμε...

----------


## DT200

> φιλε μου το κοιταξα αλλα δεν μπορεσα να το βρω.



δεν πειράζει θα το πω, δεν έχει και καμία μεγάλη αξία.




> The DS1307 can be run in either 12-hour or 24-hour mode. Bit 6 of the hours register is defined as the
> 12-hour or 24-hour mode-select bit. When high, the 12-hour mode is selected. In the 12-hour mode, bit 5
> is the AM/PM bit with logic high being PM. In the 24-hour mode, bit 5 is the second 10-hour bit (20 to
> 23 hours). The hours value must be re-entered whenever the 12/24-hour mode bit is changed.



όταν διάβαζες τον καταχωρητή $2, το Bit 6 σου έκανε την ζημιά (01000000=64) διότι ή έπρεπε να το μηδενίσεις πριν κάνεις το BCD  ή να
το υπολογίσεις (12-hour mode).
το πρόβλημα ήταν ότι ο αριθμός 64 είναι ποιο μεγάλος από το 24 
και εσύ έλεγες if temp=24 then temp=0 , λογικό δεν είναι ?
με την εντολή όμως if temp>23 then temp=0 έχεις διπλό όφελος.

βέβαια το ίδιο ισχύει και με τα λεπτά , η επαγγελματική λύση θα ήταν 
να κάνεις αρχικοποίηση στους καταχωρητές του RTC.

για τις υπόλοιπες ερωτήσεις σου δεν έχω απάντηση ,
προχωράμε όπως θέλεις εσύ.

----------


## billtech

ωραια.το καταλαβα.να το κανουμε οπως ειπα νομιζω ειναι καλυτρα...γλυτωνουμε και ποδαρακια.απλα μετα αν εχουμε χρονο (αυτο τωρα μου μπηκε σαν ιδεα) να το κανουμε να λειτουργει και σαν 12-ωρο και σαν 24-ωρο.τωρα θα κανω το την ασκηση 6 και μετα θα κανω την αποθηκευση των αλαρμ..μετα την συγκριση.οκ?

----------


## billtech

εχεις καμια ιδεα για το πως να κανω αυτο με το on/off για τα αλαρμ που εχω πει.να το κανω σημερα-αποψε αν μου βγει.εχω μια ιδεα απλα για να μην σπαταλαμε χρονο.
τι λες?

----------


## billtech

το εκανα φιλε μου..
νομιζω ετσι ειναι καλο...
κοιταξε το και εσυ και μου λες.

----------


## DT200

το δοκίμασες ? δουλεύει ?

----------


## billtech

ναι το δοκιμασα. και δουλευει

----------


## DT200

πραγματικά δεν το περίμενα !!! 
διότι έχει μέσα ένα λαθάκι που με την 
λογική τον Pic 16F δεν παίζει ,
αλλά εσύ τώρα έχεις 18F, ίσος για αυτό .

άντε σήμερα το τελειώνεις και από αύριο διορθώσεις και 
τακτοποίηση του κώδικα.  :Tongue: 

Υ.Γ. κερνάω από ένα σφηνάκι σε όποιον διαβάσει 
αυτό το μήνυμα , έπιασα τα %1111101000 πόστ. :Dancing:

----------


## Nemmesis

> Υ.Γ. κερνάω από ένα σφηνάκι σε όποιον διαβάσει 
> αυτό το μήνυμα , έπιασα τα %1111101000 πόστ.



εγω καταλαβα  :Tongue2: 
δες στην υπογραφη μου :Smile:

----------


## briko

το σωστο ειναι %1111101001

----------


## billtech

τι λετε ρε παιδια?τι γλωσσα μιλατε?  :Smile:

----------


## briko

το 1000 η το 1001 σε διαδικη μορφη ποσο ειναι:

----------


## billtech

1000 σε δυαδικη ειναι 1111101000
1001 σε δυαδικη ειναι 1111101001
και το 1+1=2 αρα 10 στο δυαδικο.
εννοειται οτι εκανε ο φιλος DT200 1000 post? σωστα?

----------


## billtech

αυτο ειναι το τελικο προβληματικο!! προγραμμα..
αν και κανονικα κανω τον ελεγχο καπου παει λαθος.
για δοκιμη εβαλα 2 led. τα led μου για να αναψουν θελουν να πανε στη γη αφου η αλλη πλευρα ειναι στη ταση.
αλλα οταν το δοκιμασα το προγραμμα δεν μου δουλεψε.καπου κανω λαθος.το κοιταξα αρκετα αλλα καπου καποια λεπτομερια μου διαφευγει.κοιταξετε το και εσεις και μου λετε.
αντε και τελειωνουμε..επιτελους.  :Smile:  :Smile:

----------


## briko

εχω κανει μια μικρη μετατροπη δες μηπως παιξει ετσι

Check1:
       'edo elegxo an tha kano elegxo ton alarm i oxi  gia to alarm 1
       if ALRM1_S=1 then
          if  Eeprom_ALARM1_STR_HOUR=ores  *and*
              if Eeprom_ALARM1_STR_MIN=min
                 then portd.7=0
*else portd.7=1*
              end if
           end if

----------


## billtech

δεν γινετε ετσι....με το else Ποθ εβαλες.γιατι ετσι δεν θα αναψει ποτε.
πχ.

Eeprom_ALARM1_STR_HOUR=13
Eeprom_ALARM1_STR_MIN=05

μολις παει 
Eeprom_ALARM1_STR_HOUR=13
Eeprom_ALARM1_STR_MIN=06 θα σβησει.

θα αναψει και θα σβησει μεσα σε ενα λεπτο.

μονο το and δεν ξερω αν παιζει.αυτο θα δοκιμασω

----------


## briko

λογικο ακουγετε

----------


## DT200

> δεν γινετε ετσι....με το else Ποθ εβαλες.γιατι ετσι δεν θα αναψει ποτε.
> πχ.
> 
> Eeprom_ALARM1_STR_HOUR=13
> Eeprom_ALARM1_STR_MIN=05
> 
> μολις παει 
> Eeprom_ALARM1_STR_HOUR=13
> Eeprom_ALARM1_STR_MIN=06 θα σβησει.
> ...



 :Applause:  :Applause:  :Applause:  

εσύ έχεις πάρει πολύ φόρα !!! δεν σε σταματάει τίποτα !!! :Επιθετικός:

----------


## billtech

ναι αλλα την λυση δεν βρισκω....εθκαθα

----------


## DT200

θα το βρεις... 

πάντως θέλω να σε πληροφορήσω ότι 
η μισή λύση είναι εδώ , απλά δεν την 
έχεις δει ακόμα.




> Check1:
>        if ALRM1_S=1 then
>           if  Eeprom_ALARM1_STR_HOUR=ores  *and*
>               if Eeprom_ALARM1_STR_MIN=min
>                  then portd.7=0
> *else portd.7=1*
>               end if
>            end if



Υ.Γ. θα το κοιτάξω και εγώ το πρόγραμμα σου και θα σου έχω νέα.

----------


## billtech

αν εννοεις το and δεν μου δουλεψε.και αν δεν κανω λαθος αυτο ισχιει για bit.
και οχι για αυτο που εχουμε εμεις.

bitwise AND; compares pairs of bits and generates a 1 result if both bits are 1,  otherwise it returns 0

----------


## DT200

φτιάξε ένα μικρό πρόγραμμα και "παίξε" να δεις 
αν δουλεύει, και αν δουλεύει το πως δουλεύει.

επίσης μπορείς να κάνεις την δουλειά που θα σου  έκανε το AND και 
με άλλες εντολές ...

----------


## billtech

τι εννοεις?
αν μπορεις πες μου που ειναι το λαθος να το βρω γιατι εχω φαει ολο το απογευμα σχεδον.τι δεν βλεπω ρε γμτ?πιστευω ειναι καποια λεπτομερια.

----------


## DT200

ας το πάρουμε από την αρχή ,
αν το κάνεις με το AND κάνει δουλειά ?

----------


## billtech

οχι..δεν με αφηνει καν να κανω build.παραξενο αυτο.

----------


## DT200

για δείξε μου τον κώδικα , όχι όλο το πρόγραμμα Alarm 
μόνο το μικρό (δοκιμαστικό) που έκανες.

----------


## billtech

ποιο?τωρα το εχω παει πισω εκει που ειναι και το doc που εχω αναιβασει.το τελευταιο...αφου δεν δουλευαν τα γυρνουσα πισω σε αυτο και ξανα εκανα δοκιμες σε αυτο.αλλα επειδη δεν δουλευαν δεν τις κρατουσα.
με λιγα λογια ο κωδικας ειναι ιδιος με αυτον που αναιβασα τελευταια.

----------


## DT200

θα ήταν καλό να κάνεις αυτό 




> φτιάξε ένα μικρό πρόγραμμα και "παίξε" να δεις 
> αν δουλεύει, και αν δουλεύει το πως δουλεύει



αυτό θα σε βοηθείσει πολύ !

----------


## billtech

κοιτα να δεις...δοκιμασα και κατι αλλο. αφαιρεσα απο τον ελεγχο τις ωρες και αφησα μονο τα λεπτα.
το εβαλα σε λεπτα 13ξεκινα και 15 σταματα..αλλα τιποτα.κατι αλλο ειναι νομιζω.
τι εννοεις να κανω ενα μικρο προγραμμα?να κανει τι?πως το σκεφτηκες να γινει?

----------


## DT200

πρέπει να φτιάξεις ένα πρόγραμμα που να χρησιμοποιείς
την εντολή AND Π..Χ.

if ALRM1_S=1 then
          if  Eeprom_ALARM1_STR_HOUR=ores  *and*
              if Eeprom_ALARM1_STR_MIN=min
                 then portd.7=0
*else portd.7=1*
              end if
           end if  		

αν καταφέρεις να ανάψεις το Led, τότε η εντολή AND σου κάνει.

----------


## billtech

νομιζω εντοπισα που ειναι το προβλημα.με καποια πειραματα που εκανα βρηκα οτι ποτε δεν μπαινει στο check1 δηλαδη στην υπορουτηνα...η για να ειμαι πιο σαφης μπαινει αλλα παντα βρισκει το ALRM1_S=0 με αποτελεσμα να μην κανει τον ελεγχο των λεπτων και των ωρων.και παιρνει παντα το ALRM1_S απο την αρχικοποιηση και οχι απο το κομματι που του αλλαζω καταστασεις εγω.αν και στη οθονη αλλαζει αρα το ALRM1_S αλλαζει κατασταση, η υπορουτηνα check1 παιρνει την τιμη απο το main.
γιατι το κανει αυτο?το εψαξα αλλα τιποτα..δεν εχει λογικη.

----------


## DT200

δώσε μου τον κώδικα που έχεις τώρα.

----------


## billtech

αν κοιταξεις μεσα θα δεις οτι το κομματι CHECK1 δουλευει κανονικα.μονο οταν:



```
   'arxikes times stous kataxorites
    d1=0
    alarm1_str_hour=12
    alarm1_str_min=23
    alarm1_stp_hour=12
    alarm1_stp_min=23
    alarm2_str_hour=12
    alarm2_str_min=23
    alarm2_stp_hour=12
    alarm2_stp_min=23
    ALRM1_S=1
    ALRM2_S=0
```


με αυτη την κατασταση δουλευει κανονικα το πρωτο αλαρμ.γιατι?γιατι περνει απο εδω την κατασταση 1 και παιζει.ενω το αλαρμ 2 που ειναι 0 δεν παιζει.γιατι βλεπει 0.
εγω ομως δεν θελω να διαβαζει αυτο αλλα τα αλλαγμενα που εχω στο κομματι αυτο:



```
  '---------------------------------------------------------------------------------------------
                                'othoni 6
   
  set6:IF ALRM1_S=0 THEN TXT1=("OFF")  ELSE TXT1=("ON") END IF
       IF ALRM2_S=0 THEN TXT2=("OFF")  ELSE TXT2=("ON") END IF
       
       LCD_Cmd(LCD_CLEAR)
       LCD_Cmd(LCD_CURSOR_OFF)
       LCD_Out(1,1, "Alarm 1:")
       delay_ms(100)
       LCD_Out(1,10, TXT1)
       delay_ms(100)
       LCD_Out(2,1,"Alarm 2:")
       delay_ms(100)
       LCD_Out(2,10, TXT2)
       delay_ms(100)
   
        BUT_D=PORTD
        DELAY_MS(50)
        if BUT_D.1=0 then goto a11 end if
        if BUT_D.2=0 then goto a12 end if
        IF BUT_D.0=0 THEN GOTO check END IF
        goto set6
   
  a11:
       if Button(PORTD, 1, 100, 1) then
          ALRM1_S=NOT(ALRM1_S)
          goto set6
        end if
        goto a11
  a12:
       if Button(PORTD, 2, 100, 1) then
          ALRM2_S=NOT(ALRM2_S)
          goto set6
        end if
        goto a12
```


ενω στη οθονη αλλαζει η κατασταση αρα και το περιεχομενο του ALRM1_S και ALRM2_S μετα που παει στο CHECK1 δεν τα χρησιμοποιει.

----------


## billtech

τι λες να φταιει?
εγω δεν βρισκω τπτ.

----------


## DT200

νομίζω ότι αυτό θα σου δουλέψει τώρα.




> READ_Eeprom:
>      'diavazo apo tin Eeprom ta alarm
>      'ALARM 1
>      Eeprom_ALARM1_STR_HOUR=Eeprom_Read($00)
>      GOSUB DT200
>      Eeprom_ALARM1_STR_MIN=Eeprom_Read($01)
>      GOSUB DT200
>      Eeprom_ALARM1_STO_HOUR=Eeprom_Read($02)
>      GOSUB DT200
> ...



μην ξεχάσεις να φτιάξεις έναν καταχωρητή JJ as byte.

----------


## billtech

δεν καταλαβα...αυτο γιατι το κανουμε?
αφου αυτα ο επεξεργαστης τα διαβαζει κανονικα.
οπως ειπα και πριν οταν το ALRM1_S το ckeck1 οταν αλλαξα την κατασταση στην αρχηκοποιηση δουλεψε κανονικα.αρα διαβαζει σωστα απο την Eeprom αν ειναι αυτο που θες να μου πεις.το προβλημα που εντοπισα ειναι στη οθονη 6.εκει μεσα με τα κουμπακια αλλαζω την κατσταση των alrm1_s και alrm2_s αλλα μετα δεν τα βλεπει στο κυριος προγραμμα.χρησιμοποιει αυτα που εχω στη αρχικοποιηση.

----------


## billtech

ΤΕΛΟΣ!!! δουλεψε παιδια...παιζει καλα..οπως δειχνει..πιο βραδακι θα αναιβασω ολο το κωδικα τελειωμενο.

----------


## DT200

μπράβο τα κατάφερες !!!
ομολογώ ότι δεν περίμενα να το 
φτιάξεις τόσο εύκολα διότι δεν ήξερες και πολλά από Pic.

περιμένω να δω τον κώδικα.

----------


## billtech

αυτος ειναι ο κωδικας μου παιδια...και μου δουλευει.

το προβλημα ηταν στο σημειο που εκανα NOT(ALRM1_S). 
και αυτο δεν γινοταν γιατι δεν ηταν απλα δυαδικο που το αλλαζεις αλλα δεκαδικο.
και ετσι το εκανα με if  και δουλεψε.και φυσικα χρειαστηκε το κομματι που ειπε 
παραπανω ο φιλος DT200.με αυτο το κομματι δουλευε καλυτερα
νομιζω καλο ειναι.
τι λετε?

----------


## briko

αυτη η υπρουτινα γιατι μπαινει;


DT200:
FOR JJ=O TO 100
NOP
NEXT JJ
RETURN

στο τελευταιο προγραμμα και μονον σ'αυτο η mikrobasic  μου βγαζει 
1:1      E-0   Linker error:_main_set1:label not found

----------


## DT200

> αυτη η υπρουτινα γιατι μπαινει;



την έχει αλλάξει με ένα ποιο σωστό όνομα (βλέπε DEL)




> στο τελευταιο προγραμμα και μονον σ'αυτο η mikrobasic  μου βγαζει 
> 1:1      E-0   Linker error:_main_set1:label not found



αυτό που σου λέει είναι ότι δεν βρίσκει την ετικέτα (label)
με το όνομα set1... :Glare:

----------


## billtech

ε?για ποια ετικετα μιλαμε?

----------


## briko

αν θες μπορεις να εξηγησεις



νομίζω ότι αυτό θα σου δουλέψει τώρα.
Παράθεση:READ_Eeprom:
'diavazo apo tin Eeprom ta alarm
'ALARM 1
Eeprom_ALARM1_STR_HOUR=Eeprom_Read($00)
GOSUB DT200
Eeprom_ALARM1_STR_MIN=Eeprom_Read($01)
GOSUB DT200
Eeprom_ALARM1_STO_HOUR=Eeprom_Read($02)
GOSUB DT200
Eeprom_ALARM1_STO_MIN=Eeprom_Read($03)
GOSUB DT200

'ALARM 2
Eeprom_ALARM2_STR_HOUR=Eeprom_Read($04)
GOSUB DT200
Eeprom_ALARM2_STR_MIN=Eeprom_Read($05)
GOSUB DT200
Eeprom_ALARM2_STO_HOUR=Eeprom_Read($06)
GOSUB DT200
Eeprom_ALARM2_STO_MIN=Eeprom_Read($07)
GOSUB DT200
RETURN

DT200:
FOR JJ=O TO 100
NOP
NEXT JJ
RETURN 

μην ξεχάσεις να φτιάξεις έναν καταχωρητή JJ as byte.

----------


## DT200

> αν θες μπορεις να εξηγησεις.



τι να σου εξηγήσω ?
ποια είναι η ερώτηση  ?

----------


## billtech

αν καταλαβα την ερωτηση σου το gosub DT00 που εβαλε ο φιλος ειναι κατι σαν καθυστερηση για να προλαβαινει ο επεξεργαστης να επικοινωνει με την Eeprom και να περνει τα alarm.
αν καταλαβα και εγω καλα αυτο.
και εκτος απο το λαθος που ειχε ο κωδικας μου με τα not(ALRT) χρειαζοταν και αυτο για να δουλεψει.αρα ο φιλος DT200 ειχε για αλλη μια φορα δικαιο.

----------


## briko

Η συγκεκριμένη υπορουτίνα

DEL: FOR JJ=0 TO 100
     NOP
     NEXT JJ
     RETURN


κάνει κάτι  εάν ήταν μόνον delay τότε θα ήταν ποιο εύκολο να βάζαμε μια εντολή 
Delay_ms(1000)


στο προγραμμα η γραμμη 120 και 121 οπως και η 208 με 209 εχουν ενωθει και γιαυτο μου εβγαζε το μηνυμα λαθους

----------


## savnik

> Η συγκεκριμένη υπορουτίνα
> 
> DEL: FOR JJ=0 TO 100
> NOP
> NEXT JJ
> RETURN
> 
> 
> κάνει κάτι εάν ήταν μόνον delay τότε θα ήταν ποιο εύκολο να βάζαμε μια εντολή 
> Delay_ms(1000)



Το NOP είναι ένας κύκλος μηχανής. Αρα έχουμε 101 κύκλους , και με κρύσταλο 4ΜΗΖ έχουμε κύκλο μηχανής = 1μs. Δηλαδή συνολικά 101μs.

----------


## billtech

ΩΡΑΙΟΣ! καπως ετσι το σκεφτηκα και εγω αλλα δεν ηξερα ακριβως τους αριθμους.
αλλα γιατι δεν βαλαμε DELAY_us?

----------


## savnik

> ΩΡΑΙΟΣ! καπως ετσι το σκεφτηκα και εγω αλλα δεν ηξερα ακριβως τους αριθμους.
> αλλα γιατι δεν βαλαμε DELAY_us?



Στο πρόγραμμα αυτό το ίδιο είναι , δηλαδή  DELAY_us(101)
αλλά σε μερικά άλλα προγράμματα που χρειάζεται ακρίβεια πρέπει να χρησιμοποιήσεις γλώσσα assemply για να δουλέψουν σωστά οι χρόνοι.

----------


## savnik

Έχω όμως μερικές παρατηρήσεις με το πρόγραμμα αν και δεν ασχολούμαι με την microbasic.
Γιατί διαβάζεις συνέχεια την μνήμη
Την μνήμη την διαβάζουμε στην αρχή όταν ξεκινάει το πρόγραμμα.
Γιατί γράφεις συνέχεια στην μνήμη;
Γράφουμε μόνο το τελικό αποτέλεσμα και όχι τα ενδιάμεσα (Η μνήμη έχει κάποιο όριο που αν το εξαντλήσεις μετά δεν γράφει - είναι όμως αρκετά μεγάλο).

----------


## billtech

τι εννοεις διαβαζω συνεχεια την μνημη?αφου εχω αποθηκευσει τα αλαρμ για να τα εχω αν εχω διακοπη στη ταση.και ετσι θαθε φορα παω και διαβαζω απο την μνημη τα αλαρμ.
πιο εννοεις τελικο?δεν καταλαβα

----------


## billtech

νομιζω καταλαβα τι θες να πεις...ολη αυτη η δουλεια που κανω παει στραφη εννοεις γιατι με την επιστροφη της τασης δεν διαβαζω απο την Eeprom αλλα αυταπου εχω στις αρχικοποιησεις ε?αρα σβηνονται αυτα που φυλαξα

----------


## billtech

εξαλλου φιλε μου τωρα ειμαι στο σταδιο μικροδιορθωσεων του κωδικα.
εχω αντικατασηστι το
 alarm1_str_hour=12
    alarm1_str_min=23
    alarm1_stp_hour=12
    alarm1_stp_min=23
    alarm2_str_hour=12
    alarm2_str_min=23
    alarm2_stp_hour=12
  alarm2_stp_min=23
το αντικατεστησα με το gosub READ_Eeprom.
θα δουμε τι αλλα χρειαζετε.και οτι δει καποιος να το πει αμα θελει.

----------


## briko

Ένα άλλο που έχει ξεχασθεί είναι μέσα στο menu να έχουμε δυνατότητα να κάνουμε εισαγωγή ώρας  στο ds1307

----------


## DT200

> ΩΡΑΙΟΣ! καπως ετσι το σκεφτηκα και εγω



επίτηδες δεν στο εξήγησα για να ψαχτείς λιγάκι.




> αλλα γιατι δεν βαλαμε DELAY_us?



αν δοκιμάσεις να βάλεις DELAY_us(101) θα δεις (μάλλον) ότι δεν 
δουλεύει, και αν δουλέψει δεν θα είναι πάντα σωστό.

δεν το έχω ψάξει να δω με τι εντολές κάνει DELAY_us αλλά με το 
NOP το κάνει πάντα . υποπτεύομαι ότι έχει να κάνει με το 
hardware του PIC .

----------


## DT200

> Έχω όμως μερικές παρατηρήσεις με το πρόγραμμα αν και δεν ασχολούμαι με την microbasic.
> Γιατί διαβάζεις συνέχεια την μνήμη
> Την μνήμη την διαβάζουμε στην αρχή όταν ξεκινάει το πρόγραμμα.
> Γιατί γράφεις συνέχεια στην μνήμη;
> Γράφουμε μόνο το τελικό αποτέλεσμα και όχι τα ενδιάμεσα (Η μνήμη έχει κάποιο όριο που αν το εξαντλήσεις μετά δεν γράφει - είναι όμως αρκετά μεγάλο).



συμφωνώ απόλυτα σε όλα !!!
όταν θα αρχίζαμε τις διορθώσεις (και είναι πολλές) θα το 
έλεγα και εγώ.

φαντάσου ότι εγώ εχθές το βράδυ που το έτρεξα να δω πώς πάει, 
αυτήν την ρουτίνα την ακύρωσα. (είναι σκότωμα για την EEPROM)

----------


## savnik

Υπάρχουν πολλές ατέλειες μέσα στο πρόγραμμα , αλλά πρέπει κάποιος να έχει μεγάλη πείρα και εμπειρία για να τις διορθώσει.
Δηλαδή μπορεί να γίνει πολύ πιο μικρό και σουλοπωμένο.
Π.χ. οι εντολές για την οθόνη τρώνε πολύ μνήμη (γίνεται και πιο αργό το πρόγραμμα) και θέλουν μεγάλη προσοχή όταν δουλεύεις με μεγάλα προγράμματα.

----------


## DT200

θα κάνω μία προσπάθεια να το μικρύνω,
έτσι για πλάκα , αλλά δεν θα δημοσιεύσω τον κώδικα ακόμα...

----------


## billtech

α παιδια για πρωτο μου προγραμμα σε PIC microBASIC εγω δεν μου εχω κανενα παραπονο  :Smile: 
σιγουρα εχει διορθωσεις αυτο το ξερω και εγω.δεν μπορει να ειναι τελειο, εγω το εφτιαξα.και ενας καθηγητης μου μας ελεγε δεν υπαρχει τιποτα τελειο..κατι να το πλησιασει ισως.
ηδη διορθωσα στην αρχικοποιηση να φυγουν τα   ALRM1_S=1
  ALRM2_S=1
και τα εβαλα και αυτα μεσα στη Εeprom.

----------


## savnik

> α παιδια για πρωτο μου προγραμμα σε PIC microBASIC εγω δεν μου εχω κανενα παραπονο 
> σιγουρα εχει διορθωσεις αυτο το ξερω και εγω.δεν μπορει να ειναι τελειο, εγω το εφτιαξα.και ενας καθηγητης μου μας ελεγε δεν υπαρχει τιποτα τελειο..κατι να το πλησιασει ισως.
> ηδη διορθωσα στην αρχικοποιηση να φυγουν τα ALRM1_S=1
> ALRM2_S=1
> και τα εβαλα και αυτα μεσα στη Εeprom.



Για αρχάριος είσαι πολύ προχωρημένος στη λογική των εντολών , αλλά όχι στο πως λειτουργούν οι PIC.
Καλό είναι να μάθεις τα βασικά σε assemply.Θα σε βοηθήσει αρκετά στην κατανόηση τους.

----------


## DT200

προχώρα και άλλο , βγάλε πράμα !
μέχρι τώρα το έχω φτάσει 4686Κ_byte. 

στην αρχή δοκίμασα να το βάλω σε έναν 16F877 και δεν γινότανε,
ύστερα δοκίμασα σε έναν  18F4680 και είδα ότι με την *κωδικοποίηση* 
του *18F* είναι 8Κ_byte  :W00t: , έπαθα πλάκα !

----------


## billtech

δεν ειμαι τελειος αρχαριος φιλε μου...ασχολουμουν αρκετο καιρο με μικρα προγραμματα σε assembly για τον 8051.γιαυτο αποφευγω οπως ο διαολος το λιβανι την assebly.  :Smile:  την βαρεθηκα...εκατο εντολες για κατι απλο.

σε αυτο το κωδικα που αναιβαζω εχω μια απορια.γιατι αμα περασω τιμες των αλαρμ και διακοψω την τροφοδοσια για λιγη ωρα μου κραταει τα αλαρμ ενω αν το αφησω αρκετη ωρα χωρις ταση μου τα χανει.γιατι το κανει αυτο?

----------


## DT200

χωρίς να δω το πρόγραμμα θα πω
ότι ο λόγος είναι ότι δεν προλαβαίνουν οι
πυκνωτές να εκφορτιστούν πλήρως .
θα μου πεις ότι σβήνει η οθόνη, 
τάση όμως υπάρχει, 2V είναι αρκετά. 



τα δεδομένα τα γράφεις στην EEPROM ?

----------


## billtech

ναι...σε eprom. σε καθε οθονη σχεδον φυλασσω τις αλλαγες σε eprom.
και την διαβαζω και στην αρχικοποιηση και μετα.αμα το δεις θα καταλαβεις.
ναι το ηξερα οτι ειναι απο τους πυκνωτες αλλα εμενα η απορια μου ειναι γιατι μετα?οταν αδειασουν και οι πυκνωτες να φευγουν?

----------


## DT200

δεν ψάχνω το πρόγραμμα τώρα αλλά θέλω να
μου πεις αν χάνεις τις τιμές μόνο μετά από επαναπρογραμματισμότου Pic ή 
αν τις χάνει απλά κόβοντας την τάση χωρείς να τον πειράξεις.

----------


## billtech

τι εννοεις?δεν καταλαβα...
εγω προγραμματιζω τον πικ τον περναω στο κυκλωμα..ρυθμιζω τις ωρες και την κατασταση τον αλαρμ στη τελευταια οθονη και μετα που μπαινω και βλεπω την ωρα κανονικα πια κλεινω την ταση.και οταν περασει η ωρα και την δωσω πισω δεν μου εχει αυτα που περασα

----------


## DT200

αυτό που είπα είναι ότι, αν χάνεις τα δεδομένα της EEPROM μετά από 
επαναπρογραμματισκό του μ/ε, τότε είναι φυσιολογικό.
αν όμως δεν κάνεις τίποτε άλλο εκτός από διακοπή και επαναφορά
της τάσης τότε δύο πράγματα παίζουνε :

1ον το όριο της EEPROM είναι 1.000.000 έγραφες και μάλλον το κάλυψες  :Crying: 
2ον έχει σφάλμα το πρόγραμμα.

για δοκίμασε να γράψεις σε άλλες θέσεις της EEPROM

----------


## billtech

τι εννοεις? 1.000.000? και ποτε τιςκαλυψα κιολας?
θα το δοκιμασω

----------


## DT200

1.000.000*0.05s=50.000s
50.000s/60=833min
833/60=13,8 ώρες 
τι λες τις έχεις καλύψει ?

----------


## billtech

εμ....δεν ξερω
δηλαδη τι ειναι αυτο? 13.8 ωρες?δηλαδη?τι σημαινει αυτο?

----------


## DT200

έλα ρε συ ...
αυτό σημαίνει ότι με το πρόγραμμα που έχεις φτιάξει, 
η EEPROM θα πιάσει το όριο ζωής της
σε 13,8 ώρες

----------


## billtech

τοσο λιγο?με το διαβασμα?η με το γραψιμο?γιατι αν μετραει και καθε φορα που διαβαζει παει χαθηκαμε.

----------


## DT200

δεν χαλάει κατά την ανάγνωση αλλά μόνο στην εγγραφή




> 1,000,000 erase/write cycle Data EEPROM
> memory typical



δεν είναι λίγο, όπως είπε και ο savnik
είναι μόνο για την εκκίνηση άρα θα πρέπει να αλλάξεις 1.000.000 το Alarm
για να χαλάσει η μνήμη.
διότι εγράφη στην μνήμη θα πρέπει να κάνεις μόνο κατά την αλλαγή
των τιμών του Alarm.

τώρα που έριξα μία ματιά στον κώδικα σου δεν νομίζω 
να έχεις πρόβλημα από τις πολλές έγραφες.

----------


## billtech

περιμενω νεα σου για ολο τον κωδικα.

----------


## DT200

μα είναι ψηφιακά λογικό να μην σου εμφανίζει την 
αποθηκευμένη ώρα στην οθόνη αφού τα έχεις κάνει σαλάτα :Tongue2: .
χρησιμοποιής τόσους πολλούς καταχωρητές που έχεις χάσει την μπάλα  :W00t: 
όλοι οι καταχωρητές EEPROM




> Eeprom_ALARM1_STR_HOUR,Eeprom_ALARM1_STR_MIN,Eepro  m_ALARM1_STO_HOUR,Eeprom_ALARM1_STO_MIN Eeprom_ALARM2_STR_HOUR,Eeprom_ALARM2_STR_MIN,Eepro  m_ALARM2_STO_HOUR,Eeprom_ALARM2_STO_MIN 
>   Eeprom_ALRM1_S,Eeprom_ALRM2_S



δεν έχουν καμία "σύνδεση"με τους καταχωρητές που θα γίνουν string 
και θα εμφανιστούν στην οθόνη.
δηλαδή παίρνουν τις τιμές από την EEPROM αλλά δεν την δίνουν στην οθόνη.

Edit:
Υ.Γ. τελείωσα με τις διορθόσεις και το συνολικό πρόγραμμα είναι 
       για τον 18F4680  4.436K_byte.
       και 2.502K_BYTE για τον 16F877A.
       και να φανταστείς ότι δεν χώραγε με τίποτα στον 16F877A που έχει 8ΚΒ μνήμη.

----------


## billtech

εννοεις με το πρωτο διαβασμα μετα την επαναφορα της τασης ε?
δεν δινεις ακομα λιγε πληροφοριες?γιατι χρησιμοποιο πολλους καταχωρητες?ποσους πρεπει να εχω δηλαδη?

----------


## DT200

> γιατι χρησιμοποιο πολλους καταχωρητες?  ποσους πρεπει να εχω δηλαδη?



δεν υπάρχει κανόνας που να σου λέει πόσους πρέπει να 
έχεις , το σωστό είναι να έχεις όσο το δυνατόν λιγότερους.

για αυτό εγώ χρησιμοποιώ  πολύ τον TEMP.

----------


## billtech

πω πω με σκοτωσες...αντε παλι απο την αρχη..

----------


## DT200

το έφτιαξες να λειτουργεί ?
αν όχι φτιαχτό πρώτα και μετά κάνε τις διορθόσεις.

----------


## billtech

σου ειπα...λειτουργει..μονο αυτο με τα αλαρμ απο την eeprom εμεινε.

----------


## billtech

και εδω εχω το διορθωμενο κωδικα που παιζει μια χαρα...τωρα απο θεμα μεγεθους δεεν ξερω ποσο μεγαλο ειναι.και ποσο μικρο μπορει να γινει. αυτο το αφηνω στους εμπειρους.  :Wink: 
πλακα κανω παιδια...να στε καλα..

----------


## DT200

Θέλεις να πιάσουμε τις διορθόσεις ?
καλό θα σου κάνει.

----------


## billtech

αμα θες....εγω μεσα ειμαι..γιατι ετσι θα μαθω καλυτερα.

----------


## DT200

πάμε από τα εύκολα ,
για αρχή αποθήκευσε κάπου το πρόγραμμα σου 
για να μην το χάσεις κατά λάθος.

μέσα στο πρόγραμμα έχεις βάλει πολλές 
φορές μία εντολή της οθόνης που είναι άχρηστη,
εντόπισε την και σβήστες.

----------


## billtech

εννοεις να την σβησω τελειως? οχι να την εχω σαν υπορουτηνα και να την καλω?
μιλαμε για 
clear lcd
cursor off 
ε?
αφου χρειαζονται.δεν χρειαζονται?

----------


## DT200

Τι κάνει η μία και τι κάνει η άλλη (εντολή) ?

----------


## billtech

η μια καθαριζει την οθονη και η αλλη κανει τον κερσορα Off. η δευτερη εννοεις δεν χρειαζεται?

----------


## DT200

αφού έχεις κάνει τον κέρσορα Off στην αρχή
γιατί να τον κάνεις ξανά και ξανά ?

σβήσε αυτήν και μετά σβήσε 
όλες τις εντολές WordToStrWithZeros
και φυσικά κάνε την δουλειά σου με GOSUB ...

----------


## billtech

μα αμα το κανω αυτο μου βγαινει μεγαλυτερος ο κωδικας.ποιο πολλες εντολες.

----------


## DT200

ναι αλλά εγώ δεν ξέρω τι εννοείς .
κάνοντας τι, σου βγαίνει μεγαλύτερος κώδικας

----------


## billtech

με το να αφαιρεσω τα wordtostringwithzeros δεν κερδιζω τιποτα.αφου τους καταχωρητες τους χρησιμοποιω παλι αναγκαστικα.πχ


temp=BCD2DEC(DS_sec)
       gosub con
       LCD_chr(1,11, TEXT[3])
       LCD_chr(1,12, TEXT[4])

δηλαδη να αφαιρεσω το sec?

----------


## DT200

δηλαδή μου λες ότι αν αφαιρέσεις δέκα εντολές  
wordtostrwithzeros και κάνεις την δουλειά σου μόνο
με μία εντολή σου βγάζει ποιο μεγάλο πρόγραμμα ?
αυτό αποκλείεται !
αφού αμέσως αμέσως η κάθε εντολή wordtostrwithzeros 
πιάνει 19 εντολές στον 16F.

----------


## billtech

εγω εχω 18f.
μετα, για να κανω αυτο που λες πως δηλαδη?αφου τους καταχωρητες δεν τους γλυτωνω.σωστα?
αφου τους χρησιμοποιω σε πολλα σημεια ολους.αρα αυτους δεν τους μειωνω...σωστα?

----------


## DT200

> εγω εχω 18f.



οι 18F βγάζουν μεγαλύτερο πρόγραμμα από τους 16F.
(εκτός από την περίπτωση που έχουμε πράξεις με αριθμούς)  

για να πετύχει, θα πρέπει πριν πας για την μετατροπή  να 
μεταφέρεις τα δεδομένα σου στον TEMP και στην επιστροφή, αν 
χρειάζεται να τα ξανά μεταφέρεις στον κανονικό καταχωρητή.





> αρα αυτους δεν τους μειωνω...σωστα?



προς το παρόν δεν θα τους μειώσεις αλλά θα κερδίσεις σε όγκο προγράμματος.

----------


## billtech

με συγχωρεις αλλα δεν καταλαβαινω..μπερδευτικα... :Confused1:

----------


## DT200

άστο δεν πειράζει θα ξανά γυρίσουμε.
κάνε κάτι ποιο εύκολο, μείωσε τα γράμματα που στέλνεις στην οθόνη 
Π.Χ. LCD_Out(1,1, "Alarm Start 2:") δεν χρειάζεται να τα γράψεις όλα αυτά.

----------


## billtech

συμφωνω φιλε μου μαζι σου οτι ειναι πολλα.
τι να γραψω ομως για να τα ξεχωριζω?εχει κατι πιο μικρο?
αντε να το κανω: "Al strt 2:"
αλλα ετσι δεν μοιαζει καλο.τι λες?

----------


## DT200

δεν εννοώ αυτό, δηλαδή να γράφεις μία συντομογραφία,
αλλά αντί του Alarm Start 2 γράψε μόνο Start 2, αφού το *Alarm* Stop 1 
είναι είδη στην οθόνη.  :Wink:

----------


## billtech

αααα....το πιασα.νομιζω...
το εκανα.ενταξει με αυτο..και με αυτο γλυτωνω πολυ?
αλλη διωρθωση?

----------


## briko

Επειδή όπου να είναι θα μου έρθει και εμένα το ds1307 ψάχνω για την σύνδεση του με τον pic 
Στο σχέδιο που δίνει η microe  συνδέονται η επαφή 5 του ds στο  rc4   η 6  με το rc3 και η 7 με το rb0
Ισχύει η έχετε κάνει κάτι άλλο με την 7

----------


## billtech

το ποδαρακι 7 δεν χρειαζεται να το συνδεσεις καθολου.αφησε το στον αερα.
τα υπολοιπα κανονικα οπως στο σχεδιο που ανεβασες.

----------


## briko

thanks περιμενω απo μερα σε μερα απο maxim

----------


## billtech

με το κωδικα τι κανω τωρα?τι αλλαγες?

----------


## DT200

μείωσες όλα τα γράμματα που μπορείς, μέσα σε 
όλο το πρόγραμμα ?

----------


## billtech

ναι..νομιζω...θα στο δειξω το προγραμμα οταν τα τελειωσουμε ολα για να μην το αναιβαζω συνεχεια..

----------


## DT200

καλύτερα να του ρίξω μία μάτια διότι .
θα σου πω και άλλα μυστικά για το πως 
θα μειώσεις και τον κώδικα των λέξεων :Σκέψη:

----------


## billtech

αυτος ειναι ο κωδικας μου..

----------


## DT200

εσύ θα με τρελάνεις ...
δεν είπαμε ότι δεν θα βάζεις παντού την εντολή LCD_Cmd(LCD_CLEAR) !
σου έχω κάνει ένα παράδειγμα για να το καταλάβεις καλύτερα.

Π.Χ. το start 1 και το stop 1 έχουν κοινά 
γράμματα , γιατί να τα στέλνεις.

δεν βρίσκω ούτε ένα Delay_ms(100) που πραγματικά να χρειάζεται  

δοκίμασε την εντολή Lcd_Chr_Cp(TEXT[4])

και θα σου πω και άλλα στον επόμενο γύρο.

----------


## billtech

πλακα μου κανεις?η εγω νυσταζω?θα κοψω γραμματα απο το stop/start? η να κοψω τον 1? και το ενα 1 μας κανει διαφορα?γιατι ολο αυτο?δεν μπορω να το καταλαβω.ποση σημασια παιζει?
τι κανεια αυτη η εντολη?
οσο για την Lcd_cmd(lcd_clear) καταλαθος ειναι εκει...την ξεχασα...

----------


## DT200

όχι δεν έχει τόση σημασία στο δικό σου πρόγραμμα !
αλλά μάλλον έχεις δίκιο αφού παίζει μια χαρά τσάμπα το συμπιέζουμε.

άντε να έρθει και το θερμόμετρο.

----------


## billtech

ελα μου?ποιο θερμομετρο?το ds18b20?εχει ερθει..αλλα να τελειωσουμε πρωτα τις αλλαγες που λες και μετα εκεινο...
αλλα αυριο παλι θα ασχοληθω γιατι τωρα δεν αντεχω...ψοφισα...
ευχαριστω και παλι...

----------


## billtech

ωραια..εσβησα την εντολη
LCD_Cmd(LCD_CLEAR)
και μειωσα οσο γινεται τα γραμματα που εμφανιζονται στη οθονη...

----------


## billtech

καλησπερα...ηδη σβηνω σιγα σιγα καποιους καταχωρητες που δεν χρειαζονται.
ισως αποψε να αναιβασω τον κωδικα που εκανα.

----------


## billtech

αυτες ειναι καποιες μικροαλλαγες που εκανα και μειωσα τους καταχωρητες μου.

----------


## DT200

μπορείς να κάνεις κάτι πολύ απλό...
έχεις 5 φορές την εντολή LCD_Out(2,7,":") και 
στην πραγματικότητα την θέλεις μόνο μία.

----------


## billtech

σωστος...τα εβγαλα...
πανε και αυτα.

----------


## DT200

νομίζω ότι δεν χρειάζεσαι κανένα Delay_ms(100) .(δεν είμαι και σίγουρος)

και το μεγάλο λάθος είναι ότι τρέχεις συνέχεια την ρουτίνα READ_Eeprom,
αν την βάλεις πριν το Main θα έχουν όλα καλός.

----------


## billtech

αυτο με το 100ms και εγω εχω την απορια φιλε μου αν χρειαζεται η οχι.

αν την βαλω ομως πριν το main δεν θα βλεπει ποτε τις αλλαγες που κανω και αποθηκευω μεσα σην Eeprom.αν και τωρα μου εδωσες μια ιδεα.θα το δω και θα αναιβασω το κωδικα που νομιζω μπορω να κανω.

----------


## billtech

νομιζω εδω ειμαστε...το εκανα αυτο που ειπες...εβγαλα και καποια 100ms.
κοιταξε το και εσυ και μου λες για αλλαγες που θελει.δεν το δοκιμασα ομως ακομα.θα το δοκιμασω κιολας.

ειχα ξεχασει να δω σε μια παρενθεση που ειχε μεσα στη εκφωνηση οτι θελει να ελεγχει και ημερομηνια...τι εννοω?θελουμε να μην ενεργοποιουνται τα relay μετα τις 3 το απογευμα του σαββατου και ολη την κυριακη.
αν εχουμε relay σε ωρες που ειναι μετα τις 3 για το σαββατο.την κυριακη ανεξαρτητου ωρας.
δεν ξερω αν καταλαβες τι εννοω...

Υ.Γ. : μαρεσει που λεω τελειωσε..και μου λεει ο κολλητος μου αυτο στη παρενθεση το εκανες?  :Confused1:

----------


## DT200

ωραίο είναι, αλλά έχω μία απορία ,
όταν γράφεις την λέξη STOP στην οθόνη , την δείχνει σωστά ?

----------


## billtech

ξερω οτι δεν σου αρεσει  :Angel: ....αλλα τι να κανω?αρχαριος ειμαι ακομα...
φιλε μου οπως ειπα και πριν το προγραμμα οπως ειναι τωρα δεν το εχω δοκιμασει.
οταν ηταν ομως οπως πριν alarm 2 stop το εμφανιζε καλα...
τωρα εχω μια απορια για αρχη σε σχεση με αυτο που ειπα με την ημερομηνια.πως να το κανω να ελεγχει 3 παραμετρους με 2 κουμπια που εχω τωρα?
δηλαδη?πρεπει να ρυθμηζω μερα μηνα χρονο.εγω εχω 3 κουμπια.ενα set και τα αλλα 2.πως να το κανω να ελεγχο και τις 3 παραμετρους με 2 κουμπια?η καλυτερα να το κανω με 3 κουμπια(Αρα συνολο με το σετ 4)?

----------


## DT200

το RTC έχει και ημερολόγιο.
αυτό που πρέπει να κάνεις είναι να ζητάς από το RTC και 
την ημέρα Π.Χ. Δευτέρα , τρίτη ...

φυσικά κατά την εκκίνηση του μ/ε (μετά από διακοπή ρεύματος)
θα πρέπει να ενημερώνεις το RTC για το τι ημέρα είναι.

αυτή είναι μία λύση από τις πολλές που μπορούν να γίνουν.

Υ.Γ. μην ανησυχείς για το πρόγραμμα σου , είναι καλό !

----------


## billtech

το ξερω οτι εχει ημερολογιο...
το προβλημα μου οπως προ-ειπα ειναι οτι :
-δεν ξερω πως να το κανω με τα 2 κουμπακια που εχω για αλλαγες να ρυθμηζω μερα   μηνα και χρονολογια...
  να το κανω σε μια οθονη να ρυθμιζω μερα μηνα και σε αλλα οθονη χρονολογια μονο?
-πως να ελεγχο σε 2 σεγκεκριμενες μερες οπως ειναι το σαββατο και η κυριακη να γινονται αυτα στα αλαρμ?

----------


## DT200

αν το ζητούμενο είναι, να μην 
χτυπάει από το Σαββάτο (μεσημέρι) και όλη την 
Κυριακή, τότε δεν σε ενδιαφέρει η ημερομηνία αλλά
η ημέρα , άρα δεν χρειάζεσαι τίποτε άλλο εκτός από 
την ρύθμιση της ημέρας στο RTC .

----------


## billtech

δεν σε καταλαβα καλα καλα...
κοιτα ναι δεν με ενδιαφερει για σαββατο απογευμα και ολη την κυριακη.
το καλοκαιρι ομως ειναι και αλλες μερες που θα αφαιρουνται.
εσυ πως μου το προτινεις δηλαδη?

----------


## DT200

έτσι όπως το λες τώρα, θα χρειαστείς μία ακόμα οθόνη 
για το κάθε Alarm που θα του λες τις ημέρες λειτουργίας.

και στο σημείο που κάνεις Check1 θα "κοιτάς" και τι ημέρα 
είναι σήμερα (RTC) και αν το Alarm είναι ενεργό για την συγκεκριμένη ημέρα.

----------


## billtech

ναι αλλα αυτο δεν μου φενεται ευκολο...μπορεις να μου πεις καμια ιδεα να ξεκινησω? ξερω να διαβασω τα δεδομενα απο το RTC.δηλαδη να εμφανιζω και την ημερομηνια στη οθονη.
για να ξεκινησουμε.πως να σεταρω την ημερομηνια?δηλαδη εχω 2 κουμπακια τωρα πως να σεταρω τις 3 παραμετρους?
πες μου καμια ιδεα...

----------


## savnik

> ναι αλλα αυτο δεν μου φενεται ευκολο...μπορεις να μου πεις καμια ιδεα να ξεκινησω? ξερω να διαβασω τα δεδομενα απο το RTC.δηλαδη να εμφανιζω και την ημερομηνια στη οθονη.
> για να ξεκινησουμε.πως να σεταρω την ημερομηνια?δηλαδη εχω 2 κουμπακια τωρα πως να σεταρω τις 3 παραμετρους?
> πες μου καμια ιδεα...



Μπορείς με το ίδιο κουμπί να ρυθμίζεις δυο παραμέτρους.

----------


## billtech

δηλαδη?πως?μπορεις να μου το αναλυσεις λιγακι?

Υ.Γ: δεν μου παιζει το προγραμμα που αναιβασα τελευταιο.ολα δειχνουν καλα αλλα τα αλαρμ δεν ανοιγουν.μοτι παιζει με το ALRM1_S και 2.

----------


## billtech

αμαν ρε παιδια δεν το πιστευω..θα χαζεψω...
κοιταξετε αυτο το προγραμμα και πειτε μου που εχει το λαθος και δεν ξεκινουν τα αλαρμ.
εχω φαει ολο το μεσημερι μου και δεν το εντοπισα.
pls HELP!!!

----------


## briko

Απο το προγραμμα 





> αυτες ειναι καποιες μικροαλλαγες που εκανα και μειωσα τους καταχωρητες μου.



μεχρι το 





> αμαν ρε παιδια δεν το πιστευω..θα χαζεψω...
> κοιταξετε αυτο το προγραμμα και πειτε μου που εχει το λαθος και δεν ξεκινουν τα αλαρμ.
> εχω φαει ολο το μεσημερι μου και δεν το εντοπισα.
> pls HELP!!!



οι αλλαγες που εχεις κανει ειναι  να καταργησεις τα Eeprom_ALARM1_STR_HOUR   κτλ και να τα αντικαταστησεις με alarm2_stp_hour   κτλ  αρα το προβλημα σου πρεπει να ειναι σ'αυτο το τμημα

2ο Συνηθως στους χρονοδιακοπτες και αλλα παρεμφερη κυκλωματα υπαρχουν 3 η 4 διακοπτες ενας για να μπαινει στο menu  ενας για αυξηση ενας για μειωση τιμης και προαιρετικα ενας για save ο οποιος αλλες φορες ειναι ιδιος με τον διακοπτη menu 
στο δικο σου προγραμμα εχεις κανει κατι δικο σου -γνωμη μου ειναι οτι ολοι αυτοι δεν κανουν λαθος- και ειναι πολυ ευκολο να κανεις τις μικροαλλαγες που χρειαζεσε για να γινει ενα ολοκληρομενο προγραμμα

----------


## DT200

έχεις βάλει στον μ/ε κάποια προηγούμενη έκδοση του 
προγράμματος για να δεις ότι όλα έχουν καλώς με το κύκλωμα ?

το πρώτο πρόβλημα που βρήκα είναι στο READ_Eeprom:

και το δεύτερο στο Check1:

----------


## billtech

δεν το δοκιμασα με παλιο που παιζει σιγουρα.

που εντοπισες το προβλημα...Pls κανε καμια βοηθεια γιατι εσκασαν τα νευρα μου.ολο το απογευμα το κοιταω και χαζεψα..ισως ειναι κατι απλο που δεν το βλεπω.

----------


## DT200

> δεν το δοκιμασα με παλιο που παιζει σιγουρα.



ελπίζω μέχρι τώρα που γράφω αυτό το μήνυμα να το έχεις κάνει ,
τι βλέπεις παίζει ?

το ένα πρόβλημα είναι ότι έχεις ξεχάσει στην
ρουτίνα READ_Eeprom, ένα GOSUB DEL

και το δεύτερο είναι στην ρουτίνα Check1,
έχεις βάλει ανάποδα το alarm2_stp_hour και το alarm2_str_hour.

----------


## billtech

λοιπον...δοκιμασα εκεινο που δουλευε και τωρα ουτε αυτο μου δουλευει.μου κανει τα ιδια.
αλλα..!
στην αρχικοποιηση εκανα ενα αναβοσβησμα των Led Και αναβοσβησαν κανονικα.
αρα δεν εχουν καει τα ποδαρακια.
τι φταιει ομως?ιδου η απορια?τι τα επιασε τωρα?

----------


## DT200

γράψε *μετά* το gosub READ_Eeprom και *πρίν* το ARXH γράψε τις εντολές 

ALRM1_S=1 και ALRM2_S=1

----------


## billtech

αυτο φανταζομαι μου ειπες να το κανω στο καινουριο προγραμμα.το τελευταιο.
το εκανα και δουλεψε  πραγματι.και νομιζω ξερω και το λογω.αλλα το θεμα ειναι οτι εγω αυτο θελω να το διαβαζω απο την Eeprom που εχει φυλαγμενο το 1 η το 0 που πρεπει να ειναι. ετσι ειναι ενεργα παντα τα αλαρμ μετα την συνδεση τροφοδοσιας.σωστα?

----------


## DT200

κάθε φορά που επαναπρογραμματίζεις τον μ/ε η μνήμη EEPROM παίρνει 
την τιμή FF  σε όλες τις θέσεις ,
εσύ θα πρέπει να πας στο Tools =>EEPROM Editor και να βάλεις 
την τιμή 0 ή 1 στις θέσεις των ALRM1_S=1 και ALRM2_S=1
(μην ξεχάσεις να τικάρεις το κουτάκι Use this Eeprom definition)
με αυτόν τον τρόπο θα τα έχεις όλα !

Υ.Γ. φυσικά σβήσε τις εντολές  ALRM1_S=1 και ALRM2_S=1

----------


## billtech

ωραια φιλε μου..να το κανω.
μου το εξηγας λιγο αυτο που ειπες για να το καταλαβω καλυτερα?
ευχαριστω.

----------


## billtech

φιλε μου το εκανα...
το δοκιμασα αλλα δεν μου παιζει.
εκανα αυτο που δειχνω στη φωτογραφια.
ο κωδικας ειναι αυτος που αναιβαζω και δουλευει οταν κανω αυτο που μου ειπες:




> γράψε *μετά* το gosub READ_Eeprom και *πρίν* το ARXH γράψε τις εντολές 
> 
>  ALRM1_S=1 και ALRM2_S=1



οταν το εκανα αυτο που δειχνω τη φωτογραφια πατησα το Χ και εκλεισα το παραθυρακι και μετα εκανα built.

εκανα κατι λαθος?

----------


## DT200

> το ένα πρόβλημα είναι ότι έχεις ξεχάσει στην
> ρουτίνα READ_Eeprom, ένα GOSUB DEL
> 
> και το δεύτερο είναι στην ρουτίνα Check1,
> έχεις βάλει ανάποδα το alarm2_stp_hour και το alarm2_str_hour.



τώρα με έχεις τσαντίσει ! 

μου ζητάς να σου βρω τα λάθει και εγώ το κορόιδο κάθομαι και 
ψάχνω το πρόγραμμα σου γραμμή, γραμμή να τα βρω.

σου τα επισημαίνω, και εσύ ή δεν τους δίνεις σημασία ή για κάποιο 
λόγο δεν τα εφαρμόζεις ,

εντάξει , μην τα εφαρμόζεις, αλλά τουλάχιστον ενημέρωσεμαι γιατί 
δεν το έκανες , όχι για να μου δώσεις αναφορά αλλά για να ξέρω τι γίνετε.

----------


## billtech

λοιπον...
δεν τα εφαρμοσα για 2 λογους.
το πρωτο με το GOSUB γιατι ηθελα να δω αν θα δουλευε χωρις αυτο οπως δουλεψε και εκεινο το διαστημα που σου ειπα πριν αρχισω τις διορθωσεις.ηθελα να δω γιατι δουλεψε τοτε και αν ηταν τυχαιο που δουλεψε.

το δευτερο που μου επισημανες το ειχα υποψιν μου αλλα δεν το εφτιαξα απο αμελια επειδη εγω εκανα τα πειραματα με το πρωτο αλαρμ και οχι με το δευτερο.θα το εκανα πιο μετα, γιατι το ειχα σημειωσει στο χαρτι.
δεν το νομιζω ως τωρα να μου εδωσες καποια συμβουλη η απισημανση και να μην την εκανα.αρα για να μην τις κανω αυτες σημαινει ηξερα το λογο.
και αυτα να εκανα παλι δεν θα επαιζε το προγραμμα τωρα αυτο που αναιβασα για το λογο οτι οταν εγω κανω το αλλο  που μου ειπες με το να βαλω με τα το read eeprom και πριν το arxh τα 
 ALRM1_S=1 και ALRM2_S=1
δουλευε αρα δεν ηταν αυτοι οι λογοι που δεν δουλεψε.και εγω κολλησα σε αυτο που μου ειπες να παω να κανω απο το tools που πιστευα εκανα καπου λαθος και δεν μου πετυχενε.
σου αποδειξα λοιπον νομιζω οτι δεν σε "εγραψα".
και ευχαριστω για την βοηθεια ως τωρα.

----------


## billtech

εδω εχω τον κωδικα που εχω κανει ως τωρα.
μου εμεινε να παλεψω να εμφανισω στη οθονη τις μερες.και μετα να τις ελεγχο με ποιες μερες δεν θελω να λειτουργουν τα αλαρμ και ποιες θελω.
α και να βρω πως δουλευει το Eeprom Dump.

----------


## briko

πήγαινε στην σελιδα

http://www.mikroe.com/forum/viewtopic.php?p=59730#59730

ακολουθησε το μερος του παραδειγματος για την εκτυπωση 
 εγω οταν το εβαλα ολο η mikrobasic εβγαζε καποιο προβλημα αλλα το τμημα εμφανισης ηταν σωστο αφου το ιδιο εχουν παρα πολλα παραδειγματα στο forum της mikroe

----------


## billtech

```
program day

dim txt as char[15]
dim day as byte

main:

     I2C_Init(100000)
     Lcd_Config(PORTB,7,6,5,4,PORTB,2,1,3)
     LCD_Cmd(LCD_CLEAR)
     LCD_Cmd(LCD_CURSOR_OFF)
  
Arxh:
     I2C_START
     I2C_WR($D0)
     I2C_WR($03)
     I2C_Repeated_Start
     I2C_WR($D1)
     day=I2C_Rd(0)
     I2C_STOP
     
     Day  =  ((Day and $30) >> 4)*10 + (Day and %00001111)
     ByteToStr(Day,txt)
     LCD_Out(1,9,txt)

     goto Arxh
end.
```


εκανα αυτο το κομματι αλλα μου βγαζει τον αριθμο 6.δεν ξερω αν εννοει οτι ειναι η εκτη μερα.

----------


## briko

φυσικα μη περιμενεις να σου πει οτι ειναι δευτερα η τριτη
αυτο το κανεις με επιλογη οτι η 1 ειναι δευτερα η 2 ειναι τριτη κτλ

----------


## billtech

αυτο φανταστικα και εγω.
τωρα δηλ θα το κανω:
αφου το DAY=6 ΤΗΕΝ ΤΧΤ_DAY=SAT

----------


## briko

αν δεν κανω λαθος γινετε πολυ ευκολα μετην εντολη case


και οπως βλεπεις οι εντολες     
     I2C_START
     I2C_WR($D0)
     I2C_WR($01)
     I2C_Repeated_Start
χρειαζονται μονον στα δευτερολεπτα

----------


## billtech

δηλαδη? δεν την εχω χρισημοποιησει ποτε.

----------


## briko

βαζοντας τις εντολες 

 I2C_Start
   I2C_Wr($D0)
   I2C_Wr($00)
   I2C_Repeated_Start
   I2C_Wr($D1)
   Sec = I2C_Rd(1)
   while I2C_Is_Idle = 0
     nop
   wend
   Min_ = I2C_Rd(1)
   while I2C_Is_Idle = 0
     nop
   wend
   Hr = I2C_Rd(1)
   while I2C_Is_Idle = 0
     nop
   wend
   DayWeek = I2C_Rd(1)
   While I2C_Is_Idle = 0
     nop
   wend
   Day = I2C_Rd(1)
   while I2C_Is_Idle = 0
     nop
   wend
   mn = I2C_Rd(1)
   while I2C_Is_Idle = 0
     nop
   wend
   Year = I2C_Rd(0)
   while I2C_Is_Idle = 0
     nop
   wend
   I2C_Stop

εχεις μικροτερο κωδικα το μονο που χρειαζετε να προσεξεις ειναι το 0 η 1 που μπαινει στο 
mn = I2C_Rd(1)
Year = I2C_Rd(0) 
οσο για το case υπαρχει ενα καλο παραδειγμα παρακατο

----------


## briko

συμπληρομα για επανω απαντηση

----------


## billtech

λοιπον...
αυτος ειναι ο κωδικας ως τωρα.
εχει μεινει να ελεγχω ποιες μερες  θελω να λειτουργουν τα αλαρμ και ποιες μερες οχι.
και επισης να κανω αυτο που ειπε ο φιλος DT200 σε προηγουμενα μυνηματα του με το Eeprom_dump.γιατι ως τωρα δεν μου δουλεψε.
αυτα τα ολιγα.

----------


## a89fm

Πως μπορουμε να δημιουργησουμε ενα αντιγραφο οταν το πρωτοτυπο φοραει καποιο προγραμματακι

----------


## billtech

τι εννοεις...?

----------


## a89fm

Δεν εχω ασχοληθει ιδαιτερα με αυτα     .... Ειμαι του  '80
Για αυτο μην με παραξηγησετε οταν γραψω κατι..περιεργο
Εχω ενα αυτοματο τηλ/τη απο συναγερμο ο οποιος τα επαιξε 
Ψαχνωντας ανακαλυπτο οτι τα εχει παιξει το pic
Βαζοντας ενα αλλο επανω (απο αλλο τηλ/τη)πηγε σφαιρα ο παλαιος 
και ρωτω εαν αγορασω ενα νεο θα πρεπει να προγραμματιστη ?
(συμφωνα με το παλαιο)

----------


## Zener_

Ναι πρέπει να κάνεις με ένα προγραμματιστή copy το πρόγραμμα και να το φορτώσεις στο καινούργιο.

----------


## savnik

> Ναι πρέπει να κάνεις με ένα προγραμματιστή copy το πρόγραμμα και να το φορτώσεις στο καινούργιο.



Φυσικα θα ειναι κλειδωμενο.

----------


## a89fm

> Φυσικα θα ειναι κλειδωμενο.




Ευχαριστω πολυ για το ενδιαφερον τα καταφερα!

----------


## George_b

Καλησπερα παιδια!!! Διαβασα και τις 33 σελιδες , συγχαρητήρια για την υπομονη και την βοηθεια που δινεται ο ενας στον αλλον.


Ενδιαφέρομαι να φτιαξω το ιδιο project με αυτο που περιγράφετε σε αυτο το θεμα.  Ενα Alarm Clock το οποιο θα ενεργοποιεί και θα απενεργοποιεί ενα ρελε στην προγραμματισμενη ωρα και ημερα.
Προγραμματισμό δεν ξερω. Μονο το flowcode χρησιμοποιώ για να κανω βασικα πραγματάκια με τους PIC. 
Υπαρχει καποιο flow diagram να με βοηθησει στο να αρχισω να γραφω και εγω τον κωδικα μου στο flowcode? 

Ευχαριστω Πολυ
Γιωργος

----------


## briko

http://www.mikroe.com/eng/make_proje...ay-timers-pic/

ετοιμο με 4 εξοδους κτλ κτλ

----------


## George_b

Ευχαριστώ για την απάντηση. Φαίνεται πολύ ωραίο αυτό το kit αλλα θα προτιμήσω να το παλέψω μονος μου και για την εμπειρία και επειδή δεν θα μου κοστίσει τόσο όσο κάνει το kit μιας και έχω όλα τα εξαρτήματα είδη..

----------


## briko

σε είπε κανένας να αγοράσεις τις πλακέτες ?
έχει όλα τα σχέδια από όλες τις πλακέτες .
παίρνεις ότι τμήμα σχεδίου σε καλύπτει , το περνάς στο eagle και έχεις το δικό σου κύκλωμα με έτυμες τις υπορουτινες τις οποίες αν θες τις διαμορφώνεις ανάλογα με τα κέφια σου

----------


## George_b

Μετα απο δευτερη ματια ειδα οτι εχει και τα σχεδια..ευχαριστω

----------

