Thông báo

Collapse
No announcement yet.

cách tạo số ngẫu nhiên

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • cách tạo số ngẫu nhiên

    Em có bài toán thế này các bác chỉ cho em với.

    + Tạo một số ngẫu nhiên có giá trị từ 0->255 ( 8 bit ) tương ứng với 3 số hiển thị ra 3 led 7 thanh.

    + Cứ sau 1s ( khônng có sự tác động bên ngoài ) cứ hiển thị ra led một số ngẫu nhiên trong khoảng trên.

    Thanks mọi người trước.

  • #2
    có nhiều cách:
    -lấy bất kỳ 1 giá trị biến đổi nào của 1 thanh ghi của cpu
    -dùng 1 biến thay đổi trong timer
    - sử dụng 1 công thức toán học nào đó c=a/b; b#0, a biến đổi theo chu ky
    ........
    có 1+1 tỷ cách làm
    nhưng phải kiểm tra c#c_old

    Comment


    • #3
      Có thể bạn dùng 1 timer để tạo số ngẫu nhiên, khởi động 1timer_A, sau đó khoảng 1s (dùng 1 timer_B khác) bạn đọc giá trị timer đó sẽ tạo ra được số ngẫu nhiên.

      Comment


      • #4
        Nguyên văn bởi FFGmember
        + Cứ sau 1s ( khônng có sự tác động bên ngoài ) cứ hiển thị ra led một số ngẫu nhiên trong khoảng trên.
        Phần này thuộc về cơ bản, bạn sẽ tìm thấy rất nhiều trên diễn đàn.

        Nguyên văn bởi FFGmember
        + Tạo một số ngẫu nhiên có giá trị từ 0->255 ( 8 bit ) tương ứng với 3 số hiển thị ra 3 led 7 thanh.
        Thực tế chỉ có các thuật toán giả ngẫu nhiên thôi, chứ không tạo được số ngẫu nhiên. Bạn có thể dễ dàng tìm thấy trên net. Trong Viễn thông, cũng có một số mạch tạo số ngẫu nhiên (kỹ thuật trải phổ thì phải). Tôi sẽ tìm, nếu thấy sẽ chuyển cho bạn
        Sudden wake-up at night
        Open window for my teacher!

        Comment


        • #5
          Việc tạo hai bộ time thì nhất định nó sẽ có chu kỳ lặp lại ( về nguyên tắc )
          Đây chỉ là bộ đếm thông thường với thời gian lấy mẫu 1 giây

          Chỉ cần bạn lắp được bộ phát nhiễu trắng để đưa vào bộ đếm là xong
          Nếu không bạn lấy ngay tín hiệu Xì xì của Radio FM khi không thu được đài cũng có tính chất tương tự .
          Chuyên làm các mạch điện tử bí hiểm và kỳ quặc .
          nguyendinhvan1968@gmail.com

          Mobil : 0903 252 168 Chỉ gọi từ 09 giờ đến 17 giờ . Từ 18 giờ ngoài vùng phủ sóng

          Comment


          • #6
            Nguyên văn bởi FFGmember
            Em có bài toán thế này các bác chỉ cho em với.

            + Tạo một số ngẫu nhiên có giá trị từ 0->255 ( 8 bit ) tương ứng với 3 số hiển thị ra 3 led 7 thanh.

            + Cứ sau 1s ( khônng có sự tác động bên ngoài ) cứ hiển thị ra led một số ngẫu nhiên trong khoảng trên.

            Thanks mọi người trước.
            số chỉ 1 byte tức 8 bit chuyện lặp lại là hiển nhiên. sau 256 giây sẽ lặp lại.
            vì đây là yêu cầu của tác giả chỉ 1 byte

            Comment


            • #7
              Nguyên văn bởi nguyendinhvan
              Việc tạo hai bộ time thì nhất định nó sẽ có chu kỳ lặp lại ( về nguyên tắc )
              Đây chỉ là bộ đếm thông thường với thời gian lấy mẫu 1 giây

              Chỉ cần bạn lắp được bộ phát nhiễu trắng để đưa vào bộ đếm là xong
              Nếu không bạn lấy ngay tín hiệu Xì xì của Radio FM khi không thu được đài cũng có tính chất tương tự .
              Bộ đếm 1 s thiết kế theo cách tương đối, nghĩa là không chính xác thì sẽ được ngẫu nhiên ngay. Đơn giản là dùng kiểu hỏi vòng trong hàm main(thiết kế trong hàm main chứa nhiều lệnh). Vậy timer 1 s sẽ có sai số tương đối, còn timer để lấy số liệu kia là gần tuyệt đối(ngắt: nên dùng timer 16 bit, nhưng chỉ đọc dữ liệu ở 8 bit thấp) thì sẽ giải quyết được bài toán.

              Ngoài ra có nhiều cách khác:
              1-Cách tạo mã giả ngẫu nhiên
              2-Cách dùng 1 timer đọc một biến nháp nào đó(thanh ghi AX của 89 chẳng hạn), trong phần mềm thì liên tục sử dụng thanh ghi AX này như một thanh ghi nháp thực sự
              3-Cách nhiễu trắng ở ngoài vào để tăng timer? vậy mạch cụ thể thế nào anh Vân nhỉ? thiết kế đơn giản nhất mà không cần dùng đến mạch rf

              Comment


              • #8
                Mạch đếm các bạn tham khảo ở đây
                http://dientuvietnam.net/board/showt...0870#post10870

                Còn mạch phát nhiễu có thể dùng Diot Zene ( hoặc dùng đèn Neon ) được hồi tiếp với một Tran hay IC thuật toán ( để tôi vẽ sau )

                Theo tôi thì tất cả các tín hiệu tạo ra từ mạch điện đều có tính chu kỳ lặp lại . Có thể dài hay ngắn thôi . Nhưng nếu sử dụng khuyết điểm gây nhiễu của LK thì không có tính lặp lại .
                Chuyên làm các mạch điện tử bí hiểm và kỳ quặc .
                nguyendinhvan1968@gmail.com

                Mobil : 0903 252 168 Chỉ gọi từ 09 giờ đến 17 giờ . Từ 18 giờ ngoài vùng phủ sóng

                Comment


                • #9
                  Troi a, day la cach tao so ngau nhien trong toan hoc chu, may nguoi cu xui dai con nha nguoi ta lam gi the nua ko biet, cac tin hieu nhieu trang, nhieu hong, . . . la cac tin hieu analog chu, ko le la di ADC roi moi duoc nua hay sao . De tao so gia ngau nhien thi trong vien thong co ly thuyet trai pho can su dung chuoi gia ngau nhien ma don gian nhat la su dung chuoi m-tuyen tinh. Da thuc sinh cua no se la:
                  G(x) = a0 + a1*x + . . . . + aN*x(mu N)
                  Neu ko co the to hop mot chuoi Gold, . . . phuc tap hon tu mot so chuoi m-tuyen tinh. Neu chuoi co chieu dai la 8 bit thi toi da la sau 255 trang thai se bi lap lai - gia ngau nhien. Nhung chu y cach nay la chuoi tin hieu ra se la noi tiep va dung co roi vao "trang thai chet".
                  Ngoai ra trong cac tai lieu toan roi rac hay so hoc thi co day phuong phap de tao ra chuoi ngau nhien, tai sao lai di su dung cach dung thanh ghi hay thoi gian de lam gi ???
                  Chuoi duoc goi la ngau nhien thi ko bao gio co quy luat gi ca va dac biet la mat do pho tin hieu giong pho cua tap am Gausse, . . . . .
                  Troi ko so dat ko so chi so minh ko biet so

                  Comment


                  • #10
                    Nguyên văn bởi Kesitinh
                    Troi a, day la cach tao so ngau nhien trong toan hoc chu, may nguoi cu xui dai con nha nguoi ta lam gi the nua ko biet, cac tin hieu nhieu trang, nhieu hong, . . . la cac tin hieu analog chu, ko le la di ADC roi moi duoc nua hay sao . De tao so gia ngau nhien thi trong vien thong co ly thuyet trai pho can su dung chuoi gia ngau nhien ma don gian nhat la su dung chuoi m-tuyen tinh. Da thuc sinh cua no se la:
                    G(x) = a0 + a1*x + . . . . + aN*x(mu N)
                    Neu ko co the to hop mot chuoi Gold, . . . phuc tap hon tu mot so chuoi m-tuyen tinh. Neu chuoi co chieu dai la 8 bit thi toi da la sau 255 trang thai se bi lap lai - gia ngau nhien. Nhung chu y cach nay la chuoi tin hieu ra se la noi tiep va dung co roi vao "trang thai chet".
                    Ngoai ra trong cac tai lieu toan roi rac hay so hoc thi co day phuong phap de tao ra chuoi ngau nhien, tai sao lai di su dung cach dung thanh ghi hay thoi gian de lam gi ???
                    Chuoi duoc goi la ngau nhien thi ko bao gio co quy luat gi ca va dac biet la mat do pho tin hieu giong pho cua tap am Gausse, . . . . .
                    Bác này đi đâu cũng không suy nghĩ, post lung tung, hiểu lung tung, ko hiểu bản chất vấn đề. Pó tay.
                    May mà 3T chưa có ở đây..
                    Tạo số ngẫu nhiên là tạo ra một số xuất hiện một cách ngẫu nhiên, mình không biết trước. Vậy có nhiều cách để làm.
                    Cách dùng nhiễu cũng là một cách đúng, cách dùng timer cũng vậy.

                    Comment


                    • #11
                      Về bản chất, anh ND Van va KST nói đúng đấy. Phải quan tâm đến phổ, nếu nó không trải đều thì k0 phải ngẫu nhiên.
                      Khi thực hiện, tất nhiên là dùng các hàm toán. Dùng timer e rằng không ổn.
                      Sudden wake-up at night
                      Open window for my teacher!

                      Comment


                      • #12
                        Google keyword: Linear Feedback Shift Registers

                        Comment


                        • #13
                          Cách 1 dùng khuếch đại nhiễu, do nhiễu là thành phần xuất hiện ta không thể biết trước, dùng một counter đếm số xung, cứ 1 s thì đọc tổng số xung mà bộ đếm đếm được sau 1 s. Sơ đồ nguyên lý như sau:

                          Comment


                          • #14
                            Cách 2 dùng timer một cách đơn giản, dùng 1 timer 16 bit(prescale=1, tức là tần số lối vào timer= max clk hệ thống), đọc giá trị ở 8 bit thấp(0--255)
                            Trong main()
                            while(1)
                            {
                            lệnh 1;
                            lệnh 2;
                            lệnh 3;
                            ...
                            ....
                            lệnh N
                            Lệnh đọc và xóa cờ tràn timer//Tạo số ngẫu nhiên.
                            }
                            Ngoài ra thêm các ngắt để delay thời gian khácnhau
                            Ngắt 1;
                            Ngắt 2;
                            Ngắt 3;
                            Do timer thay đổi rấtnhanh so với các lệnh và các ngắt, nên ko thể biết trước giá trị timer lần tiếp theo. Hơn nữa các lệnh 1,2... các ngắt có thể kiểu rẽ nhánh, các tác động ở ngoai vào cũng ngẫu nhiên... nên thời gian thực hiên lệnh khác nhau.

                            Comment


                            • #15
                              Cách 3: khi mới khởi tạo đọc giá trị của một số thanh ghi có giá trị mặc định khi bật nguồn không xác định, sau đó kết hợp với các kỹ thuật khác

                              Comment

                              Về tác giả

                              Collapse

                              FFGmember Tìm hiểu thêm về FFGmember

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X