Dua hari menonton di attiny2313 dan ds1307

Motif


Untuk memulainya, setiap orang hidup dalam waktu yang, sayangnya, tidak dapat dihentikan. Dan karena kita hidup di dunia ini, maka mari kita catat waktu dan jangan lewatkan satu menit, buang waktu saja. Untuk ini, saya membuat perangkat luar biasa ini, yang disebut arloji .
gambar

Ayo mulai!


Matahari terbit di jalan, saya menggambar papan sirkuit dan menggaruknya di mesin fotokopi untuk mencetak papan sirkuit.

gambar

Selanjutnya, mereka yang tahu bagaimana papan sirkuit dibuat akan mengerti bahwa saya mentransfer gambar dengan besi ke textolite, tergores, kaleng, dll, dan mereka yang tidak tahu - baca di Internet tentang pembuatan papan sirkuit dengan metode LUT - (Teknologi menyetrika dengan laser).
Saya lupa untuk menembak hasilnya, tetapi saya pikir kualitasnya akan terlihat di papan selesai: Anda

gambar

dapat melihat tempat-tempat yang tidak muncul, tetapi tidak ada hal buruk yang terjadi, hanya TPA yang tertinggal.
Selanjutnya, perlu untuk menyolder komponen, yang tidak akan saya bahas secara khusus, tinggalkan daftar saja:
  • AtTiny2313 - mikrokontroler 8-bit
  • ds1307 - chip penghitung dengan akurasi yang baik
  • jam kuarsa pada 32,768 kHz
  • 2 x 10K resistor
  • 7 resistor per 10 ohm
  • 1 x 5,2 kΩ resistor
  • 4 resistor per 1 kOhm
  • 4 transistor KT315 (saudara modern mereka)
  • Bel 5 volt
  • 2 tombol jam (pemasangan sudut)
  • 4 indikator (10011-BSR) anoda umum
  • 47 microfarad tantalum
  • dan soket daya dan dudukan sudut (diameter lubang - 5.1mm, diameter kontak tengah - 1.5mm)

Dan biarkan panjang daftar ini tidak mengganggu Anda, karena kami telah merakit perangkat selama bertahun-tahun, dan itu harus dipasang pada tingkat yang tepat!
Siapa yang ingin melihat papan dari sisi lain, di sini ada foto:

gambar

Programnya


Seperti semua perangkat, arloji membutuhkan program. Dalam hal ini, program ini ditulis dalam BASIC dalam BASCOM AVR. Bahasa ini sangat nyaman untuk pemrograman, karena kodenya jelas, efisien dan tidak memakan banyak ruang pada mikrokontroler. Saya tidak mulai menulis program dari awal, tetapi saya mengambil kode sumber dari satu artikel di situs dengan besi solder. Mereka yang tertarik akan menemukan, saya hanya meninggalkan kode yang saya selesaikan di sini:

$regfile = "attiny2313.dat"
$crystal = 8000000

Dim Count As Byte
Dim Number(4) As Integer
Dim Pointmem As Byte
Dim Point As Bit
Dim Mine As Byte
Dim Hour As Byte
Dim Seco As Byte
Config Porta.1 = Output
Porta.1 = 1
Waitms 10
Porta.1 = 0
Waitms 70
Porta.1 = 1
Waitms 10
Porta.1 = 0
Config Portb = Output
Config Porta.0 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.6 = Output
Config Sda = Portd.5
Config Scl = Portd.4
Config Pind.0 = Input
Portd.0 = 1
Config Pind.1 = Input
Portd.1 = 1
Config Timer1 = Timer , Prescale = 64
On Timer1 Awake:
Config Timer0 = Timer , Prescale = 64
On Ovf0 Refresh
Dig1 Alias Porta.0 : Dig2 Alias Portd.2 : Dig3 Alias Portd.3 : Dig4 Alias Portd.6
Enable Interrupts
Enable Ovf0
Enable Timer1
Start Timer1

Hour = 0
Mine = 0

If Pind.1 = 0 And Pind.0 = 0 Then
Porta.1 = 1
Waitms 100
Porta.1 = 0
Hour = 0
Mine = 0
Seco = 1

Seco = Makebcd(seco)
I2cstart
I2cwbyte &HD0
I2cwbyte 0
I2cwbyte Seco
I2cstop

Mine = Makebcd(mine)
I2cstart
I2cwbyte &HD0
I2cwbyte 1
I2cwbyte Mine
I2cstop

Hour = Makebcd(hour)
I2cstart
I2cwbyte &HD0
I2cwbyte 2
I2cwbyte Hour
I2cstop
Waitms 1000
Porta.1 = 1
Waitms 10
Porta.1 = 0
End If

Do
I2cstart
I2cwbyte &HD0
I2cwbyte &H00
I2cstart
I2cwbyte &HD1
I2crbyte Seco , Ack
I2crbyte Mine , Ack
I2crbyte Hour , Nack
I2cstop
Seco = Makedec(seco)
Mine = Makedec(mine)
Hour = Makedec(hour)

If Seco = 80 Then
Seco = 10
Seco = Makebcd(seco)
I2cstart
I2cwbyte &HD0
I2cwbyte 0
I2cwbyte Seco
I2cstop
End If

If Hour > 9 Then
Number(1) = Hour / 10
Number(1) = Abs(number(1))
Else
Number(1) = 20
End If

Number(2) = Hour Mod 10

If Mine > 9 Then
Number(3) = Mine / 10
Number(3) = Abs(number(3))
Else
Number(3) = 0
End If

Number(4) = Mine Mod 10

If Pind.1 = 0 Then
Porta.1 = 1
Waitms 10
Porta.1 = 0
If Mine = 59 Then
Mine = 0
Else
Incr Mine
End If

Mine = Makebcd(mine)
I2cstart
I2cwbyte &HD0
I2cwbyte 1
I2cwbyte Mine
I2cstop
Else

If Pind.0 = 0 Then
Porta.1 = 1
Waitms 10
Porta.1 = 0
If Hour = 23 Then
Hour = 0
Else
Incr Hour
End If
Hour = Makebcd(hour)
I2cstart
I2cwbyte &HD0
I2cwbyte 2
I2cwbyte Hour
I2cstop
End If
End If

Waitms 250
Loop

Awake:
If Point = 1 Then
Porta.1 = 1
Waitus 10
Porta.1 = 0
End If
Toggle Point
Return

Refresh:
Reset Dig1 : Reset Dig2 : Reset Dig3 : Reset Dig4
Incr Count : If Count > 4 Then Count = 1
If Count = 2 And Point = 1 Then
Pointmem = Number(2) + 10
Portb = Lookup(pointmem , Digits)
Else
Portb = Lookup(number(count) , Digits)
End If
Select Case Count
Case 1 : Set Dig1
Case 2 : Set Dig2
Case 3 : Set Dig3
Case 4 : Set Dig4
End Select
Return

Digits:

Data &B00101000 , &B01111011 , &B00110100 , &B00110010 , &B01100011
Data &B10100010 , &B10100000 , &B00101011 , &B00100000 , &B00100010
Data &B00001000 , &B01011011 , &B00010100 , &B00010010 , &B01000011
Data &B10000010 , &B10000000 , &B00001011 , &B00000000 , &B00000010
Data &B11111111


Kami mem-flash hampir 2 kilobyte kode dalam mikron dan mengamati bagaimana perangkat yang baru mulai hidup telah mulai melayani orang tersebut.
Sejujurnya, saya merasakan kesenangan luar biasa dalam menciptakan sesuatu yang jauh dari mudah dipahami oleh banyak orang)
Sepertinya perangkat tanpa kasing, saya akan mengerjakan kasing setelah menulis artikel ini:

gambar

Jadi, arloji sudah siap, tetapi bagaimana cara kerjanya? Ini saya tunjukkan di paruh pertama video ini (saya tidak meminta berlangganan atau apa pun, hanya materi)



Kesimpulan


Jadi, dalam 2 hari saya membuat perangkat yang akan menunjukkan kepada saya berapa banyak yang tersisa untuk melakukan satu hal dan beralih ke hal lain ketika tiba saatnya, atau memulai sesuatu yang penting.
Yah, itu saja, terima kasih kepada mereka yang telah membaca sampai akhir, sukses dalam proyek Anda, dan seperti yang mereka katakan: "cod to you, 47, dan sampai jumpa di frekuensi lain! QRZ .. "

Source: https://habr.com/ru/post/id391005/


All Articles