1 | #define MODBUS_ENABLED_DDR DDRA
|
2 | #define MODBUS_ENABLED_PORT PORTA
|
3 | #define MODBUS_ENABLED PA0
|
4 | #define MODBUS_ENABLED_Output() MODBUS_ENABLED_DDR |= (1 << MODBUS_ENABLED)
|
5 | #define MODBUS_ENABLED_HIGH() (MODBUS_ENABLED_PORT |= (1 << MODBUS_ENABLED))
|
6 | #define MODBUS_ENABLED_LOW() (MODBUS_ENABLED_PORT &= ~(1 << MODBUS_ENABLED))
|
7 | #define MODBUS_ENABLED_READ() MODBUS_ENABLED_LOW()
|
8 | #define MODBUS_ENABLED_WRITE() MODBUS_ENABLED_HIGH()
|
9 |
|
10 |
|
11 | int main(void)
|
12 | {
|
13 | uint32_t debug_tx_counter = 500000UL;
|
14 |
|
15 | //Timers_Init(); // Wird im Testprogramm nicht benutzt
|
16 | Uart0_Init(19200);
|
17 | MODBUS_ENABLED_Output();
|
18 | MODBUS_ENABLED_READ();
|
19 |
|
20 | sei();
|
21 |
|
22 | while(1)
|
23 | {
|
24 | if(debug_tx_counter++ >= 200000UL)
|
25 | {
|
26 | debug_tx_counter = 0;
|
27 | MODBUS_ENABLED_WRITE();
|
28 | Uart0_Write(0xFF);
|
29 | Uart0_Write(0x00);
|
30 | Uart0_Write(0xAA);
|
31 | Uart0_Write(0x0A);
|
32 | }
|
33 | }
|
34 | }
|
35 |
|
36 | void Uart0_Init(unsigned long baud)
|
37 | {
|
38 | uint16_t _baud;
|
39 |
|
40 | // Standard Einstellungen vom IFC 050
|
41 | // Baudrate 19200
|
42 | // Daten bits 8
|
43 | // Parity even
|
44 | // Stop bits 1
|
45 |
|
46 | // Berechent aus der Baudrate den Register wert für die Baudrate
|
47 | _baud = (F_CPU / 8 / baud - 1) / 2;
|
48 |
|
49 | // Setzt die Baudrate
|
50 | UBRR0 = _baud;
|
51 |
|
52 | UCSR0B |= (1 << RXEN0); // Receiver Enable
|
53 | UCSR0B |= (1 << TXEN0); // Transmitter Enable
|
54 | UCSR0B |= (1 << RXCIE0); // RX Complete Interrupt Enable
|
55 | //UCSR0B |= (1 << TXCIE0); // TX Complete Interrupt Enable
|
56 | UCSR0B |= (1 << UDRIE0); // USART Data Register Empty Interrupt Enable
|
57 |
|
58 | // USART Mode of Operation
|
59 | // ==========================================
|
60 | // | UMSEL01 | UMSEL00 | Mode |
|
61 | // ==========================================
|
62 | // | 0 | 0 | Asynchronous USART |
|
63 | // | 0 | 1 | Synchronous USART |
|
64 | // | 1 | 0 | Reserved |
|
65 | // | 1 | 1 | Master SPI |
|
66 | // ==========================================
|
67 | // Register Bits von: UCSR0C
|
68 | // Quelle: Datenblatt ATtiny441/841 Seite 184
|
69 | // SUSART Mode = Asynchronous
|
70 |
|
71 |
|
72 | // Daten bits
|
73 | // ================================================
|
74 | // | UCSZ02 | UCSZ01 | UCSZ00 | Character Size |
|
75 | // ================================================
|
76 | // | 0 | 0 | 0 | 5-bit |
|
77 | // | 0 | 0 | 1 | 6-bit |
|
78 | // | 0 | 1 | 0 | 7-bit |
|
79 | // | 0 | 1 | 1 | 8-bit |
|
80 | // | 1 | 0 | 0 | Reserved |
|
81 | // | 1 | 0 | 1 | Reserved |
|
82 | // | 1 | 1 | 0 | Reserved |
|
83 | // | 1 | 1 | 1 | 9-bit |
|
84 | // ================================================
|
85 | // Register Bits von: UCSR0C
|
86 | // Quelle: Datenblatt ATtiny441/841 Seite 184
|
87 | // Setzt Daten bits = 8-bit.
|
88 | UCSR0C |= ((1 << UCSZ01) | (1 << UCSZ00));
|
89 |
|
90 | // Parity
|
91 | // =========================================
|
92 | // | UPM01 | UPM00 | Parity Mode |
|
93 | // =========================================
|
94 | // | 0 | 0 | Disabled |
|
95 | // | 0 | 1 | Reserved |
|
96 | // | 1 | 0 | Enabled, Even Parity |
|
97 | // | 1 | 1 | Enabled, Odd Parity |
|
98 | // =========================================
|
99 | // Register Bits von: UCSR0C
|
100 | // Quelle: Datenblatt ATtiny441/841 Seite 184
|
101 | // Setzt Parity = Even.
|
102 | UCSR0C |= (1 << UPM01);
|
103 |
|
104 | // Stop bits
|
105 | // ========================
|
106 | // | USBS0 | Stop Bit(s) |
|
107 | // ========================
|
108 | // | 0 | 1-bit |
|
109 | // | 1 | 2-bit |
|
110 | // ========================
|
111 | // Register Bits von: UCSR0C
|
112 | // Quelle: Datenblatt ATtiny441/841 Seite 184
|
113 | // Setzt Stop bits = 1-bit
|
114 |
|
115 | // Clock Polarity Settings
|
116 | // =============================================================
|
117 | // | UCPOL | Transmitted Data Changed | Received Data Sampled |
|
118 | // | | (Output of TxDn Pin) | (Input on RxDn Pin) |
|
119 | // =============================================================
|
120 | // | 0 | Rising XCK Edge | Falling XCK Edge |
|
121 | // | 1 | Falling XCK Edge | Rising XCK Edge |
|
122 | // =============================================================
|
123 | // Register Bits von: UCSR0C
|
124 | // Quelle: Datenblatt ATtiny441/841 Seite 185
|
125 | // Clock Polarity := Tx=Rising XCK Edge, Rx=Falling XCK Edge
|
126 | }
|