Forum: Mikrocontroller und Digitale Elektronik Speicher Voll Attiny2313


von Alde Oma (Gast)


Lesenswert?

Hi,

ich habe mir vor ca. einem Jahr folgendes kleines Programm geeschrieben:
(Attiny2313 - Auf I2C-Daten und entsprechend eine Frequenz ausgeben)
1
// I2C
2
3
#include   <stdlib.h>
4
#include   <avr/io.h>
5
#include   <avr/interrupt.h>
6
#include   <avr/pgmspace.h>
7
8
#include   "i2cslave.h"
9
#define   I2CADDRESS 0x20
10
11
#ifndef   F_CPU
12
#define   F_CPU 8000000UL
13
#endif
14
15
// PWM
16
#include <util/delay.h>
17
18
void Init_I2C(void) {
19
    // Disable interrupts
20
    cli();
21
22
    // TWI slave init
23
    i2c_init(I2CADDRESS);
24
25
    // Re-enable interrupts
26
    sei();
27
  
28
  // Reset buffer to 0
29
    for (int i = 0; i < buffer_size; i++)
30
    i2c_buffer[i] = 0;
31
}
32
33
int main(void) {
34
35
  // PWM
36
    uint8_t PWM_Raw1, PWM_Raw2;    // 8-bit PWM value
37
    uint16_t PWM_Norm1, PWM_Norm2;
38
    DDRB |= (1 << PB4) | (1 << PB3);                   // PWM output on PB3 and PB4
39
40
  TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << WGM11);
41
  TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11);
42
  
43
  ICR1 = 20000;
44
45
  // Initalice I2C
46
    Init_I2C();
47
48
    // Set Port 1 to output
49
    DDRD |= (1 << DDD0);
50
51
  while (1) {
52
    
53
    // I2C
54
      if ((i2c_buffer[15] == 0)) {
55
        // Port D0 low
56
        PORTD &= ~(1 << PD0); // Low
57
      
58
    } else {
59
      // Port D0 high
60
      PORTD |= (1 << PD0); // High
61
      }
62
    
63
    // PWM
64
    PWM_Raw1 = i2c_buffer[1];
65
    PWM_Raw2 = i2c_buffer[2];
66
    
67
    // Normieren
68
    // 0 ~ 1000
69
    // 127 ~ 1500
70
    // 255 ~ 2000
71
    PWM_Norm1 = (PWM_Raw1 * 4) + 1000;
72
    PWM_Norm2 = (PWM_Raw2 * 4) + 1000;
73
    
74
    // Ausgang setzen
75
    OCR1A = PWM_Norm1;
76
    OCR1B = PWM_Norm2;
77
        
78
  }
79
}

Seit her hatte ich keine Zeit mehr, mich an die Weiterentwicklung zu 
machen. Nun habe ich gestern mein Windows neu aufgesetzt und AtmelStudio 
installiert.
Alles soweit eingerichtet und versucht die Daten auf den Tiny zu laden. 
Jedoch bekomme ich nun folgenden Fehler:
1
Severity  Code  Description  Project  File  Line
2
Error    Program Memory Usage   :  534 bytes   26,1 % Full
3
        Data Memory Usage     :  257 bytes   200,8 % Full  (Memory Overflow)  Quadro  Quadro  0
Ausgabe:
1
------ Build started: Project: Quadro, Configuration: Release AVR ------
2
Build started.
3
Project "Quadro.cproj" (default targets):
4
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "C:\Users\Alexander\Documents\Atmel Studio\7.0\Quadro\Quadro\Quadro.cproj" (target "Build" depends on it):
6
  Task "RunCompilerTask"
7
    Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
8
    C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 8 --output-sync 
9
    make: Nothing to be done for 'all'.
10
  Done executing task "RunCompilerTask".
11
  Task "RunOutputFileVerifyTask"
12
Quadro(0,0): error:     Program Memory Usage   :  534 bytes   26,1 % Full
13
        Data Memory Usage     :  257 bytes   200,8 % Full  (Memory Overflow)
14
  Done executing task "RunOutputFileVerifyTask" -- FAILED.
15
Done building target "CoreBuild" in project "Quadro.cproj" -- FAILED.
16
Done building project "Quadro.cproj" -- FAILED.
17
18
Build FAILED.
19
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
Das Programm konnte vor einem Jahr aber ohne Probleme erzeugt und 
geflasht werden.
Die Optimierung steht auf -Os

Habe ich noch irgendetwaas vergessen, was ich umstellen muss?

von Ozvald (Gast)


Lesenswert?

Hallo, wo wird der Variable buffer_size ein Wert zugewiesen?

von (prx) A. K. (prx)


Lesenswert?

Mapfile?
I2C-Code?

: Bearbeitet durch User
von Alde Oma (Gast)


Lesenswert?

Hier die beiden Dateien für die I2C-Kummunikation

i2cslave.c
1
/**
2
 * Name: USI TWI Slave driver - I2C/TWI-EEPROM
3
 * Version: 1.3  - Stable
4
 * Autor: Martin Junghans  jtronics@gmx.de
5
 * Page: www.jtronics.de
6
 * License: GNU General Public License
7
 *
8
 * Update: 09.09.2011 - ATtiny24, ATtiny44, ATtiny88
9
 *
10
 * Created from Atmel source files for Application Note AVR312:
11
 * Using the USI Module as an I2C slave like an I2C-EEPROM.
12
 * 02.02.2013 - reworked by Willi Thiel
13
 */
14
15
#include <avr/io.h>
16
#include <avr/interrupt.h>
17
#include "i2cslave.h"
18
19
#define SET_USI_TO_SEND_ACK( )   { USIDR = 0; \
20
                DDR_USI |= ( 1 << PORT_USI_SDA ); \
21
                USISR = ( 0 << USI_START_COND_INT ) | \
22
                ( 1 << USIOIF ) | ( 1 << USIPF ) | \
23
                ( 1 << USIDC )| \
24
                ( 0x0E << USICNT0 );} /*!< Prepare ACK; Set SDA as output; Clear all interrupt flags, except Start Cond; Set USI counter to shift 1 bit */
25
26
#define SET_USI_TO_READ_ACK( )   { USIDR = 0; \
27
                DDR_USI &= ~( 1 << PORT_USI_SDA ); \
28
                USISR = ( 0 << USI_START_COND_INT ) | \
29
                ( 1 << USIOIF) | \
30
                ( 1 << USIPF ) | \
31
                ( 1 << USIDC ) | \
32
                ( 0x0E << USICNT0 );} /*!< Set SDA as input; Prepare ACK; Clear all interrupt flags, except Start Cond; Set USI counter to shift 1 bit */
33
34
#define SET_USI_TO_TWI_START_CONDITION_MODE( ) { \
35
                USICR = ( 1 << USISIE ) | ( 0 << USIOIE ) | \
36
                ( 1 << USIWM1 ) | ( 0 << USIWM0 ) | \
37
                ( 1 << USICS1 ) | ( 0 << USICS0 ) | ( 0 << USICLK ) | \
38
                ( 0 << USITC ); \
39
                USISR = ( 0 << USI_START_COND_INT ) | ( 1 << USIOIF ) | ( 1 << USIPF ) | \
40
                ( 1 << USIDC ) | ( 0x0 << USICNT0 ); } /*!< Enable Start Condition Interrupt, disable Overflow Interrupt; Set USI in Two-wire mode, no USI Counter overflow hold; Shift Register Clock Source = External, positive edge; 4-Bit Counter Source = external, both edges; No toggle clock-port pin; Clear all interrupt flags, except Start Cond */
41
42
#define SET_USI_TO_SEND_DATA( ) { DDR_USI |=  ( 1 << PORT_USI_SDA ); \
43
                USISR = ( 0 << USI_START_COND_INT ) | ( 1 << USIOIF ) | ( 1 << USIPF ) | \
44
                ( 1 << USIDC) | \
45
                ( 0x0 << USICNT0 ); \
46
                } /*!< Set SDA as output; Clear all interrupt flags, except Start Cond; Set USI to shift out 8 bits */
47
48
#define SET_USI_TO_READ_DATA( ) { DDR_USI &= ~( 1 << PORT_USI_SDA ); \
49
                USISR =  ( 0 << USI_START_COND_INT ) | ( 1 << USIOIF ) | \
50
                ( 1 << USIPF ) | ( 1 << USIDC ) | \
51
                ( 0x0 << USICNT0 ); \
52
                } /*!< Set SDA as input; Clear all interrupt flags, except Start Cond; Set USI to shift out 8 bits */
53
54
typedef enum {
55
    USI_SLAVE_CHECK_ADDRESS = 0x00, USI_SLAVE_SEND_DATA = 0x01, USI_SLAVE_REQUEST_REPLY_FROM_SEND_DATA = 0x02, USI_SLAVE_CHECK_REPLY_FROM_SEND_DATA = 0x03, USI_SLAVE_REQUEST_DATA = 0x04, USI_SLAVE_GET_DATA_AND_SEND_ACK = 0x05
56
} overflow_state_t;
57
58
volatile uint8_t slave_address; /*!< Address of the I2C slave */
59
volatile overflow_state_t overflow_state; /*!< overflow state of the I2C slave */
60
61
/**
62
 * Initialize slave
63
 *
64
 * @param address The address of the I2C slave device
65
 */
66
void i2c_init(uint8_t address) {
67
    slave_address = address;
68
69
    // In Two Wire mode (USIWM1, USIWM0 = 1X), the slave USI will pull SCL
70
    // low when a start condition is detected or a counter overflow (only
71
    // for USIWM1, USIWM0 = 11).  This inserts a wait state. SCL is released
72
    // by the ISRs (USI_START_vect and USI_OVERFLOW_vect).
73
74
    // Set SCL and SDA as output
75
    DDR_USI |= (1 << PORT_USI_SCL) | (1 << PORT_USI_SDA);
76
77
    // Set SCL high
78
    PORT_USI |= (1 << PORT_USI_SCL);
79
80
    // Set SDA high
81
    PORT_USI |= (1 << PORT_USI_SDA);
82
83
    // Set SDA as input
84
    DDR_USI &= ~(1 << PORT_USI_SDA);
85
86
    USICR = (1 << USISIE) |  // Enable Start Condition Interrupt
87
            (0 << USIOIE) |  // Disable Overflow Interrupt
88
            (1 << USIWM1) | (0 << USIWM0) |  // Set USI in Two-wire mode, no USI Counter overflow hold
89
            (1 << USICS1) | (0 << USICS0) | (0 << USICLK) |  // Shift Register Clock Source = external, positive edge 4-Bit Counter Source = external, both edges
90
            (0 << USITC);  // No toggle clock-port pin
91
92
    // clear all interrupt flags and reset overflow counter
93
    USISR = (1 << USI_START_COND_INT) | (1 << USIOIF) | (1 << USIPF) | (1 << USIDC);
94
}
95
96
/**
97
 * USI Start Condition ISR
98
 */
99
ISR( USI_START_VECTOR) {
100
101
    // Set default starting conditions for new TWI package
102
    overflow_state = USI_SLAVE_CHECK_ADDRESS;
103
104
    // Set SDA as input
105
    DDR_USI &= ~(1 << PORT_USI_SDA);
106
107
    // Wait for SCL to go low to ensure the Start Condition has completed (the
108
    // Start detector will hold SCL low ) - if a Stop Condition arises then leave
109
    // The interrupt to prevent waiting forever - don't use USISR to test for Stop
110
    // Condition as in Application Note AVR312 because the Stop Condition Flag is
111
    // going to be set from the last TWI sequence
112
113
    while ((PIN_USI & (1 << PIN_USI_SCL)) && !((PIN_USI & (1 << PIN_USI_SDA))))
114
        ;  // SCL his high and SDA is low
115
116
    // A Stop Condition did not occur
117
    if (!(PIN_USI & (1 << PIN_USI_SDA))) {
118
        USICR = (1 << USISIE) |  // Keep Start Condition Interrupt enabled to detect RESTART
119
                (1 << USIOIE) |  // Enable Overflow Interrupt
120
                (1 << USIWM1) | (1 << USIWM0) |  // Set USI in Two-wire mode, hold SCL low on USI Counter overflow
121
                (1 << USICS1) | (0 << USICS0) | (0 << USICLK) |  // 4-Bit Counter Source = external, both edges; Clock Source = External, positive edge
122
                (0 << USITC);  // No toggle clock-port pin
123
124
    } else {
125
        // A Stop Condition did occur
126
        USICR = (1 << USISIE) |  // Enable Start Condition Interrupt
127
                (0 << USIOIE) |  // Disable Overflow Interrupt
128
                (1 << USIWM1) | (0 << USIWM0) |  // Set USI in Two-wire mode, no USI Counter overflow hold
129
                (1 << USICS1) | (0 << USICS0) | (0 << USICLK) |  // 4-Bit Counter Source = external, both edges; Clock Source = external, positive edge
130
                (0 << USITC);  // No toggle clock-port pin
131
    }
132
133
    USISR = (1 << USI_START_COND_INT) | (1 << USIOIF) |  // Clear interrupt flags - resetting the Start Condition Flag will release SCL
134
            (1 << USIPF) | (1 << USIDC) | (0x0 << USICNT0);  // Set USI to sample 8 bits (count 16 external SCL pin toggles)
135
}
136
137
/**
138
 * ISR( USI_OVERFLOW_VECTOR )
139
 *
140
 * Handles all the communication. Only disabled when waiting for a new Start Condition.
141
 */
142
ISR( USI_OVERFLOW_VECTOR) {
143
    uint8_t data = 0;
144
    switch (overflow_state) {
145
146
        /**
147
         * Address mode: check address and send ACK (and next USI_SLAVE_SEND_DATA) if OK, else reset USI
148
         */
149
        case USI_SLAVE_CHECK_ADDRESS:
150
            // If address is either 0 or own address
151
            if (USIDR == 0 || (USIDR & ~1) == slave_address) {
152
                if (USIDR & 0x01) {
153
                    // Master Write Data Mode - Slave transmit
154
                    overflow_state = USI_SLAVE_SEND_DATA;
155
                } else {
156
                    // Master Read Data Mode - Slave receive
157
                    overflow_state = USI_SLAVE_REQUEST_DATA;
158
                    // Buffer position undefined
159
                    buffer_adr = 0xFF;
160
                }  // end if
161
                SET_USI_TO_SEND_ACK()
162
            } else {
163
                SET_USI_TO_TWI_START_CONDITION_MODE()
164
            }
165
            break;
166
167
            /**
168
             * Master Write Data Mode - Slave transmit
169
             */
170
            // Check reply and goto USI_SLAVE_SEND_DATA if OK, else reset USI
171
        case USI_SLAVE_CHECK_REPLY_FROM_SEND_DATA:
172
            if (USIDR) {
173
                // If NACK, the master does not want more data
174
                SET_USI_TO_TWI_START_CONDITION_MODE()
175
                return;
176
            }
177
178
            // From here we just drop straight into USI_SLAVE_SEND_DATA if the master sent an ACK
179
        case USI_SLAVE_SEND_DATA:
180
            // No buffer position given, set buffer address to 0
181
            if (buffer_adr == 0xFF) {
182
                buffer_adr = 0;
183
            }
184
185
            // Send data byte
186
            USIDR = i2c_buffer[buffer_adr];
187
188
            // Increment buffer address for next byte
189
            buffer_adr++;
190
191
            overflow_state = USI_SLAVE_REQUEST_REPLY_FROM_SEND_DATA;
192
            SET_USI_TO_SEND_DATA()
193
            break;
194
195
            // Set USI to sample reply from master
196
            // Next USI_SLAVE_CHECK_REPLY_FROM_SEND_DATA
197
        case USI_SLAVE_REQUEST_REPLY_FROM_SEND_DATA:
198
            overflow_state = USI_SLAVE_CHECK_REPLY_FROM_SEND_DATA;
199
            SET_USI_TO_READ_ACK()
200
            break;
201
202
            /**
203
             * Master Read Data Mode - Slave receive
204
             */
205
            // Set USI to sample data from master,
206
            // Next USI_SLAVE_GET_DATA_AND_SEND_ACK
207
        case USI_SLAVE_REQUEST_DATA:
208
            overflow_state = USI_SLAVE_GET_DATA_AND_SEND_ACK;
209
            SET_USI_TO_READ_DATA( )
210
            break;
211
212
            // Copy data from USIDR and send ACK
213
            // Next USI_SLAVE_REQUEST_DATA
214
        case USI_SLAVE_GET_DATA_AND_SEND_ACK:
215
            // Read data received
216
            data = USIDR;
217
218
            // First access, read buffer position
219
            if (buffer_adr == 0xFF) {
220
                // Check if address within buffer size
221
                if (data <= buffer_size) {
222
                    // Set position as received
223
                    buffer_adr = data;
224
                } else {
225
                    // Set address to 0
226
                    buffer_adr = 0;
227
                }
228
            } else {
229
                // Ongoing access, receive data
230
231
                // Write data to buffer
232
                i2c_buffer[buffer_adr] = data;
233
234
                // Increment buffer address for next write access
235
                buffer_adr++;
236
            }
237
            // Next USI_SLAVE_REQUEST_DATA
238
            overflow_state = USI_SLAVE_REQUEST_DATA;
239
            SET_USI_TO_SEND_ACK( )
240
            break;
241
    }  // end switch
242
} // end ISR( USI_OVERFLOW_VECTOR )

i2cslave.h
1
/*
2
 *
3
 * Name: USI TWI Slave driver - I2C/TWI-EEPROM
4
 * Version: 1.3  - Stable
5
 * autor: Martin Junghans  jtronics@gmx.de
6
 * page: www.jtronics.de
7
 * License: GNU General Public License
8
 *
9
 * Created from Atmel source files for Application Note AVR312:
10
 * Using the USI Module as an I2C slave like an I2C-EEPROM.
11
 *
12
 * LICENSE: Copyright (C) 2010 Marin Junghans
13
 *
14
 * This program is free software; you can redistribute it and/or modify
15
 * it under the terms of the GNU General Public License as published by
16
 * the Free Software Foundation; either version 2 of the License, or
17
 * any later version.
18
 *
19
 * This program is distributed in the hope that it will be useful,
20
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22
 * GNU General Public License for more details
23
 *
24
 * 16.11.2010 - reworked by Markus Schatzl
25
 *
26
 * 02.02.2013 - reworked by Willi Thiel
27
 */
28
29
#ifndef _I2CSLAVE_H_
30
#define _I2CSLAVE_H_
31
32
/**
33
 * Initialize slave
34
 *
35
 * @param address The address of the I2C slave device
36
 */
37
void i2c_init(uint8_t address);
38
39
#define buffer_size 254 /*!< I2C buffer size (in bytes (2..254)) */
40
volatile uint8_t i2c_buffer[buffer_size]; /*!< I2C buffer */
41
volatile uint8_t buffer_adr; /*!< Virtual buffer address register */
42
43
#if   (buffer_size > 254)
44
#error Buffer to big! 254 bytes max.
45
46
#elif   (buffer_size < 2)
47
#error Buffer to small! 2 bytes min.
48
#endif
49
50
#if     defined( __AVR_ATtiny2313__ )
51
#define DDR_USI             DDRB
52
#define PORT_USI            PORTB
53
#define PIN_USI             PINB
54
#define PORT_USI_SDA        PB5
55
#define PORT_USI_SCL        PB7
56
#define PIN_USI_SDA         PINB5
57
#define PIN_USI_SCL         PINB7
58
#define USI_START_COND_INT  USISIF
59
#define USI_START_VECTOR    USI_START_vect
60
#define USI_OVERFLOW_VECTOR USI_OVERFLOW_vect
61
62
#elif   defined( __AVR_ATtiny24A__ ) | \
63
        defined( __AVR_ATtiny44A__ ) | \
64
        defined( __AVR_ATtiny24__ )  | \
65
        defined( __AVR_ATtiny44__ )  | \
66
        defined( __AVR_ATtiny84__ )
67
#define DDR_USI             DDRA
68
#define PORT_USI            PORTA
69
#define PIN_USI             PINA
70
#define PORT_USI_SDA        PA6
71
#define PORT_USI_SCL        PA4
72
#define PIN_USI_SDA         PINA6
73
#define PIN_USI_SCL         PINA4
74
#define USI_START_COND_INT  USISIF
75
#define USI_START_VECTOR    USI_STR_vect
76
#define USI_OVERFLOW_VECTOR USI_OVF_vect
77
78
#elif   defined( __AVR_ATtiny25__ ) | \
79
        defined( __AVR_ATtiny45__ ) | \
80
        defined( __AVR_ATtiny85__ )
81
#define DDR_USI             DDRB
82
#define PORT_USI            PORTB
83
#define PIN_USI             PINB
84
#define PORT_USI_SDA        PB0
85
#define PORT_USI_SCL        PB2
86
#define PIN_USI_SDA         PINB0
87
#define PIN_USI_SCL         PINB2
88
#define USI_START_COND_INT  USISIF
89
#define USI_START_VECTOR    USI_START_vect
90
#define USI_OVERFLOW_VECTOR USI_OVF_vect
91
92
#elif   defined( __AVR_ATtiny26__ )
93
#define DDR_USI             DDRB
94
#define PORT_USI            PORTB
95
#define PIN_USI             PINB
96
#define PORT_USI_SDA        PB0
97
#define PORT_USI_SCL        PB2
98
#define PIN_USI_SDA         PINB0
99
#define PIN_USI_SCL         PINB2
100
#define USI_START_COND_INT  USISIF
101
#define USI_START_VECTOR    USI_STRT_vect
102
#define USI_OVERFLOW_VECTOR USI_OVF_vect
103
104
#elif   defined( __AVR_ATtiny261__ ) | \
105
        defined( __AVR_ATtiny461__ ) | \
106
        defined( __AVR_ATtiny861__ )
107
#define DDR_USI             DDRB
108
#define PORT_USI            PORTB
109
#define PIN_USI             PINB
110
#define PORT_USI_SDA        PB0
111
#define PORT_USI_SCL        PB2
112
#define PIN_USI_SDA         PINB0
113
#define PIN_USI_SCL         PINB2
114
#define USI_START_COND_INT  USISIF
115
#define USI_START_VECTOR    USI_START_vect
116
#define USI_OVERFLOW_VECTOR USI_OVF_vect
117
118
#elif   defined( __AVR_ATmega165__ ) | \
119
        defined( __AVR_ATmega325__ ) | \
120
        defined( __AVR_ATmega3250__ ) | \
121
        defined( __AVR_ATmega645__ ) | \
122
        defined( __AVR_ATmega6450__ ) | \
123
        defined( __AVR_ATmega329__ ) | \
124
        defined( __AVR_ATmega3290__ )
125
#define DDR_USI             DDRE
126
#define PORT_USI            PORTE
127
#define PIN_USI             PINE
128
#define PORT_USI_SDA        PE5
129
#define PORT_USI_SCL        PE4
130
#define PIN_USI_SDA         PINE5
131
#define PIN_USI_SCL         PINE4
132
#define USI_START_COND_INT  USISIF
133
#define USI_START_VECTOR    USI_START_vect
134
#define USI_OVERFLOW_VECTOR USI_OVERFLOW_vect
135
136
#elif   defined( __AVR_ATmega169__ )
137
#define DDR_USI             DDRE
138
#define PORT_USI            PORTE
139
#define PIN_USI             PINE
140
#define PORT_USI_SDA        PE5
141
#define PORT_USI_SCL        PE4
142
#define PIN_USI_SDA         PINE5
143
#define PIN_USI_SCL         PINE4
144
#define USI_START_COND_INT  USISIF
145
#define USI_START_VECTOR    USI_START_vect
146
#define USI_OVERFLOW_VECTOR USI_OVERFLOW_vect
147
148
#elif   defined( __AVR_ATtiny24__ ) | \
149
        defined( __AVR_ATtiny44__ ) | \
150
        defined( __AVR_ATtiny84__ )
151
#define DDR_USI             DDRA
152
#define PORT_USI            PORTA
153
#define PIN_USI             PINA
154
#define PORT_USI_SDA        PA6
155
#define PORT_USI_SCL        PA4
156
#define PIN_USI_SDA         PINA6
157
#define PIN_USI_SCL         PINA4
158
#define USI_START_COND_INT  USISIF
159
#define USI_START_VECTOR    USI_STR_vect
160
#define USI_OVERFLOW_VECTOR USI_OVF_vect
161
162
#else
163
#error "no USI-Slave definition for MCU available"
164
165
#endif
166
167
#endif // ifndef _I2CSLAVE_H_

von (prx) A. K. (prx)


Lesenswert?

#define buffer_size 254
bei 128 Bytes RAM.

Solche Files postet man besser als als Anhang.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Alde Oma schrieb:
> Hier die beiden Dateien für die I2C-Kummunikation

Meine alde Omi hätte aber alles gezippt und als Dateianhang gepostet.
D.h. sie hätte die Postingregeln gelesen.

von Alde Oma (Gast)


Lesenswert?

Sorry
ich habe versucht die Dateien anzuhängen, hat aber nicht funktioniert.

Ich hab den buffer_size runter genommen und es funktioniert.
Wieso hat es damals dann aber keine Meldung gegeben und funktioniert?

von Stefan F. (Gast)


Lesenswert?

> Wieso hat es damals dann aber keine Meldung gegeben und funktioniert?

Weil du damals etwas anders gemacht hast. Eventuell hast du einen 
anderen Compiler verwendet, oder eine andere Version davon, oder eine 
andere C Library oder eine andere Einstellung für die Optimierung 
(Compiler Option -On).

von Alde Oma (Gast)


Lesenswert?

Vielen Dank für die Hilfe.

von (prx) A. K. (prx)


Lesenswert?

Alde Oma schrieb:
> Ich hab den buffer_size runter genommen und es funktioniert.
> Wieso hat es damals dann aber keine Meldung gegeben und funktioniert?

Entweder war der Puffer damals kleiner oder du hattest die Meldung 
ignoriert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.