Εμφάνιση αποτελεσμάτων : 1 έως 5 από 5

Θέμα: Αποστολή δεδομένων σε ATMEGA328 (FRAM)

  1. #1
    Μέλος
    Όνομα
    Θωμάς
    Εγγραφή
    Dec 2009
    Περιοχή
    Νάουσα
    Μηνύματα
    504

    Προεπιλογή Αποστολή δεδομένων σε ATMEGA328 (FRAM)

    Καλησπέρα.

    Όπως έχω ξαναπεί κατασκευάζω επιγραφές LED. Συνήθως δουλεύω με τον ATMEGA328.
    Ο χρήστης στέλνει δεδομένα (κείμενα ρυθμίσεις) μέσα από πρόγραμμα των windows (που φτιάχνω εγώ).
    Τα δεδομένα τα διαβάζει ο ATMEGA 328 και τα αποθηκεύει σε μία FRAM μνήμη.

    Έχω φτιάξει ένα δικό μου πρωτόκολλο επικοινωνίας το οποίο λειτουργεί ως εξής.
    έστω ότι θέλω να αποθηκεύσω στην μνήμη FRAM στην θέση 1 το δεδομένο 028 και στην θέση 2 το δεδομένο 155.

    1)o Master (windows πρόγραμμα) στέλνει το δεδομένο "W" που σημαίνει ότι κάνει αίτηση να στείλει δεδομένο και μετά περιμένει απάντηση
    2)Μόλις διαβάσει το δεδομένο ο Slave (atmega 32 στέλνει "R" απάντηση και έτσι ενημερώνει τον Master ότι μπορεί να στείλει τα δεδομένα που θέλει. Σε αυτό το σημείο ο Slave κάνει συνέχει loop μέχρι ο Master να στείλει "F" ότι τελείωσε την αποστολή
    3)Ο Master στελνει την τα δεδομένα και την θέση που θέλει να αποθηκευτούν τα δεδομένα στην FRAM. με τον εξής τρόπο:
    S0001028ES0002155E. το S σημαίνει Start,τα πρώτα 4 ψηφία ειναι η θέση της FRAM,τα 3 τελευταία το δεδομένο που θέλουμε να αποθηκευτεί και το Ε στο τέλος σημαίνει End. Δηλαδή τέλος. Αυτή την στιγμή αποθηκεύει τα δεδομένα στην FRAM.
    4)O Master στέλνει τον χαρακτήρα "F" που σημαίνει ότι τελείωσε η αποστολή των δεδομένων.
    5)O Slave στέλνει στον master το μέγεθος των εγγραφών που έγιναν στην FRAM.

    Εν ολίγης η επικοινωνία δουλεύει ώς εξής:
    Master:W
    Slave: R
    Master:S0001028E S0002155E
    Master: F
    Slave:2

    Το πρωτόκολλο αυτό που έχω επινοήσει δουλεύει με απόλυτη επιτυχία αλλά είναι κάπως χρονοβόρο...
    δηλαδή για να στείλω 2bytes στην FRAM στέλνω 9bytes!!

    Υπάρχει κάποιος τρόπος για να γλιτώσω χρόνο (και κόπο);

    0 Not allowed! Not allowed!

  2. #2
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2010
    Περιοχή
    Αθήνα
    Μηνύματα
    4.618

    Προεπιλογή

    Αν θέλεις χρήση ASCII (δηλαδή να μπορείς να τα πληκτρολογείς ακόμη και μέσα από απλό πρόγραμμα τερματικού), χρησιμοποίησε Intel-HEX που είναι standard σε όλους τους προγραμματιστές μνημών: http://en.wikipedia.org/wiki/Intel_HEX

    Εναλλακτικά, μπορείς να χρησιμοποιήσεις πλήρη 8-μπιτη κωδικοποίηση (δεν θα φαίνονται στην οθόνη με απλό τερματικό) και αποστολή ομάδων δεδομένων των 8 ή 16 bytes με checksum.

    1 Not allowed! Not allowed!

  3. #3
    Μέλος
    Όνομα
    Θωμάς
    Εγγραφή
    Dec 2009
    Περιοχή
    Νάουσα
    Μηνύματα
    504

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από GeorgeVita Εμφάνιση μηνυμάτων
    Αν θέλεις χρήση ASCII (δηλαδή να μπορείς να τα πληκτρολογείς ακόμη και μέσα από απλό πρόγραμμα τερματικού), χρησιμοποίησε Intel-HEX που είναι standard σε όλους τους προγραμματιστές μνημών: http://en.wikipedia.org/wiki/Intel_HEX

    Εναλλακτικά, μπορείς να χρησιμοποιήσεις πλήρη 8-μπιτη κωδικοποίηση (δεν θα φαίνονται στην οθόνη με απλό τερματικό) και αποστολή ομάδων δεδομένων των 8 ή 16 bytes με checksum.
    και πώς στέλνονται αυτα τα bits;

    0 Not allowed! Not allowed!

  4. #4
    Μέλος
    Όνομα
    Δημήτρης
    Εγγραφή
    Jun 2009
    Περιοχή
    Λάρισα
    Μηνύματα
    123

    Προεπιλογή

    Θα πρότεινα τα εξής:

    α. Χρήση δεκαεξάδικης κωδικοποίησης των δεδομένων διεύθυνσης FRAM. Αν πχ η FRAM έχει διευθύνσεις από 0000-2048 (δεκαδικοί αριθμοί), τότε στο δεκαεξαδικό η αντίστοιχες διευθύνσεις είναι 000-800 (δεκαεξαδικοί αριθμοί). Το 800(hex) καλό θα είναι να χρησιμοποιεί 2 bytes για αποστολή (08, 00).

    β. Χρήση δεκαεξάδικης κωδικοποίησης των δεδομένων που γράφονται στη FRAM. Αν πχ τα δεδομένα που γράφεις είναι 000-255 (δεκαδικοί αριθμοί), τότε στο δεκαεξαδικό τα αντίστοιχα δεδομένα είναι 00-FF (δεκαεξαδικοί αριθμοί). Το FF(hex) καλό θα είναι να χρησιμοποιεί 1 byte για αποστολή (FF).

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

    δ. Εναλλακτικά, μπορείς να εμπλουτίσεις το πρωτόκολλο και να έχεις δύο περιπτώσεις αποστολής δεδομένων, δηλαδή αν στείλεις W, τότε θα στέλνεις πάντα ζεύγη διεύθυνση/δεδομένο, ενώ αν στείλεις R, τότε θα στέλνεις αρχική διεύθυνση και εν συνεχεία μόνο δεδομένα για τοποθέτηση σε διαδοχικές θέσεις.

    Να σημειώσω οτι τα δύο πρώτα νομίζω οτι είναι μια απλή version αυτών που πρότεινε ο GeorgeVita.

    Ίσως αυτά να μην ταιριάζουν στην εφαρμογή σου ή στη μνήμη τύπου FRAM, αλλά ίσως βοηθήσουν κάπου.

    0 Not allowed! Not allowed!

  5. Ένα μέλος ευχαρίστησε τον jimmy956 για αυτό το χρήσιμο μήνυμα:

    GeorgeVita (20-07-13)

  6. #5
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2010
    Περιοχή
    Αθήνα
    Μηνύματα
    4.618

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από acmilangr Εμφάνιση μηνυμάτων
    και πώς στέλνονται αυτα τα bits;
    Το "W" που στέλνεις είναι το b'01010111' ή 0x57.
    Θα μπορούσε να αντικαταστήσει τη διεύθυνση 0x57 ή το περιεχόμενο δεδομένων 57 (σε μία στήλη των 8xLED θα ήταν '01010111').

    0 Not allowed! Not allowed!

Παρόμοια Θέματα

  1. Απαντήσεις: 9
    Τελευταίο Μήνυμα: 07-11-14, 16:08
  2. ερώτηση σχετικά με FRAM 3.3V
    By acmilangr in forum Μικροελεγκτές
    Απαντήσεις: 6
    Τελευταίο Μήνυμα: 04-02-13, 00:22
  3. Ερωτήση για FRAM
    By acmilangr in forum Μικροελεγκτές
    Απαντήσεις: 12
    Τελευταίο Μήνυμα: 30-05-12, 16:53
  4. μΕ atmega328
    By gsouf in forum Μικροελεγκτές
    Απαντήσεις: 3
    Τελευταίο Μήνυμα: 09-12-10, 22:27
  5. ATMEGA328
    By andreas222 in forum Μικροελεγκτές
    Απαντήσεις: 9
    Τελευταίο Μήνυμα: 16-11-10, 19:12

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας